web-dev-qa-db-ja.com

誰もログオンしていないときにコンピューターの起動時にプログラムを起動し、誰かがログオンしたときにウィンドウを表示する(OS:Windows)

Windows Server 2012のタスクスケジューラを使用して、システムの起動時に起動されるプログラムがあります。コンピュータが自動的に再起動してもプログラムは起動する必要があります。

管理者はプログラムを起動するために使用されるアカウントであり、「ユーザーがログオンしているかどうかにかかわらず実行する」オプションがタスクに対してチェックされています。

これの問題は、誰かがリモートデスクトップ接続を使用して管理者として最終的にログオンすると、インターフェイス(プログラムウィンドウ)が非表示になることです。

私が理解しているように、タスクスケジューラを使用してこれを解決する方法はありません。

これをどのように解決できますか?

これはかなり一般的な問題ですが、ネットを検索しても何も見つかりません。マイクロソフトがスケジューラでこのような制限を許可していることにかなり驚いています。起動時に実行され、ユーザーが実際にログオンしたときに表示されるプログラムを起動するVBScriptなどを作成できますか?

他のアイデア?

(ちなみに、元のプログラムに接続するGUI専用のプログラムを別に作成する必要はありません。すでに終了している必要がない場合も、 -ユーザーのログオン時にプログラムを実行し、再度起動します。)

20
Marcus

それを自分で行う方法を考え出した。それはある程度の回避策ですが、それは私が得ることを期待したものです。

やめる!まだうんざりしないでください。読む...

  • それを実行し、管理者が自動的にログオンするように設定します。

  • タスクスケジューラでタスクを作成します。ユーザー(管理者)がログオンしているときにのみ実行するように設定します。トリガーは「ログオン時」であり、管理者がログオンしたときのみであることを指定します。

  • 2番目のタスクを作成します。ユーザーがログオンしているときにのみ実行し、管理者のログオン時にトリガーします。アクションは「プログラムの開始」で、プログラムは「C:\ Windows\System32\rundll32.exe」で、引数フィールドは「user32.dll、LockWorkStation」に設定されています。

コンピューターを再起動すると、アドミニストレーターが自動的にログオンし、開始したいプログラムが開始され、ワー​​クステーションがロックされます。リモートデスクトップ接続を介してログインすると、プログラムウィンドウが表示され、GUIを使用できます。問題なくコンピュータをロック/ロック解除し、切断/再接続できます。サーバーに行って実際のワークステーションにログインしても問題はありません。管理者は既にサインインしているので、タスクは再度実行されません(抜けることができない無限のログインロックループは作成されません)。

そのような単純な。自動ログイン後にコンピューターがロックされるまでに1秒の期間があり、コンピューターに物理的にアクセスできるプロのハッカーがこの時間帯に何かをこっそり実行できると思いますが、私の場合、そのセキュリティリスクを見落とす可能性があります。私の家にプロのハッカーを入れず、コンピューターを見せない限り、システムは比較的安全です。何よりも、スーパーボールト保護を必要とするコンピューターにはそれほど価値はないので、このソリューションに非常に満足しています。

29
Marcus

Windows Server 2012のタスクスケジューラを使用して、システムの起動時に起動されるプログラムがあります。コンピュータが自動的に再起動しても、プログラムは起動する必要があります。

では、Windows仕様で定義されているように、なぜそれをシステムサービスにしないのですか?

どうすればこれを解決できますか?

それはいけません。バックグラウンドプログラムは、UIと対話することは想定されていません。または:UIは、サービスに接続する独自のプログラムを実行する必要があります。ログインしたユーザーのユーザースペースで実行されているUIがプレゼンテーションを行い、Windowsサービスが処理を行います。これは、モデルがおそらく15年ほど設計されている方法です。

マイクロソフトがスケジューラでこのような制限を許可していることにかなり驚いています。

あなたがボタリングされてその理由を聞いたことがないことに私はもっと驚いています。

複数の問題があります:

  • 複数のユーザーがログインしている場合、誰がUIを取得しますか?
  • ユーザーがログアウトすると、プログラムを強制終了しますか?痛い。
  • セキュリティ。バックグラウンドプログラムは制限された権限で実行される可能性があります。UIをユーザーに公開すると、ユーザーはそこでコードを実行できます。 Windowsメッセージングモデルには-ああ-問題があります。

ちなみに、元のプログラムに接続するGUI専用のプログラムを別に作成する必要はありません。

この時点では、私もマイクロソフトもあなたが何をしたいのか気にしていません。ログイン済みのユーザーUIにバックグラウンド処理を結び付けるために確立されサポートされているモデルがあります-それを使用するかどうかにかかわらず。しかし、そうでない場合は、あなたが立てたセキュリティの問題について非難しないでください。

17
TomTom

プログラムが実行されるSessionがすべてです。ログインしているユーザーがいない場合、表示するインタラクティブセッションがないため、Session 0には、他のユーザーのように表示されない奇妙なUIがあります。

ここで、プログラムがExplorer.exeが起動し(またはユーザーログインを検出する他の方法)、魔法のように自分自身を変形したり、その新しいセッションIDでいくつかの子プロセスを生成したりすると、ログインしたユーザーはあなたが何をしているかを喜んで見ることができます。

0
MDMoore313