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


19

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

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

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

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

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

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

他のアイデア?

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


2
Firedaemonは、Firedaemonを使用して「セッション0」に切り替えてRDPを実行したときに、アプリをサービスとしてインストールします。アプリをご覧ください。
TheCleaner

これは、独自のサービスを開発する場合に技術的に実行できます。
ライアンリース14年

1
私自身の質問に答えました。ただし、serverfault.comのシステムは非常に悪いため、2日間は自分の答えを受け入れることはできません(ほとんどの人は2日間待たずにこのページを放棄し、永遠に未解決のマークを付けたままになります)。
マーカス14年

2
@Marcus:誰が何をいつできるかという制限は、特定の悪用を止めることを目的としています。残念ながら、それらは正しいことをしようとする本物の試みに不便をもたらすことがありますが、そのような妥協が必要になることもあります。状況を改善する可能性のある提案がある場合(少なくともサイトを保護しますが、本物のユーザーの不便を少なくします)、関連する「メタ」サイト(meta.serverfault.commeta。 stackoverflow.com)の代わりに、サイトランナーが目にする可能性が非常に低いとコメントで文句を言います。
デビッドスピレット14年

投票からわかるように、あなたが受け入れたいと思う答えは、人々が承認するものではありません。なぜなら、あなたがこのことを行おうとしている方法は、そもそも間違っているからです。
ジェームズライアン14年

回答:


28

自分でそれを行う方法を見つけました。多少の回避策ですが、それが私が期待するものです。

  • さて、最初のステップは、MicrosoftからAutoLogon.exeというプログラムを入手することです:http ://technet.microsoft.com/sv-se/sysinternals/bb963905.aspx

やめる!まだ縮まないでください。読む...

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

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

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

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

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


7
失礼(または下票)なし、マーカス。しかし、これが本当にあなたが探していたタイプの答えである場合、この質問はSuperUserにより適していただろう。
ライアンボルガー14年

2
これを投稿するスタック交換を決定するのは簡単ではありませんでした。
マーカス14年

こんにちはマーカス、私はあなたの答えに従いましたが、1つではなくGUIで2つのプログラムを起動するのに問題があります。に質問を投稿しましたSuperUser。そこで答えることができれば、とても助かります
-superuser.com/questions/902386/…-user2162550

1
質問への答えではないので、実際に今もそれをダウン投票しています。質問は、ログインする正午を明示的に定義します-ここでの「ソリューション」は自動ログインを行います(だから誰かがログインしています)。たぶん、この質問ではスマートな定式化ではないかもしれませんが、質問はそのままです。
トムトム

1
@TomTomエンドユーザーに表示されるオプションとして、「ユーザーがログオンしているかどうかに関係なく実行する」とは、「開始するためにここにいる必要はありません」ということです。
アーライレイブタウログ

16

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

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

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

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

Microsoftがスケジューラーでこのような制限を許可していることにはかなり驚いています。

私はあなたが理由を尋ねることを決してボットしなかったことにもっと驚いています。

複数の問題があります。

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

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

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


3
アーメン。より多くのアプリベンダーがこの概念を理解してくれることを願っています。
ライアンボルガー14年

15
うわー、あなたの態度にうんざりしていませんか。まあ、私は運が悪いと思います。あなたが誤解され、誰かがこれを解決する何らかの方法を持たない限り、誰もがすべてを知ることができないので、あなたはあなたの投稿の絶対的な「できない」部分に間違いがあるかもしれません。誰かが共有する珍しい回避策を持っている場合に備えて、質問をしばらくの間、より多くの回答のために開いたままにしておきたいと思います。そうでなければ、あなたの答えを受け入れます。
マーカス14年

実際、現在のバージョンのWindowsでサービスにUIを提供することはますます難しくなっていますが、不可能ではありません。
MDMoore313

主にセキュリティ上の懸念のため、積極的には望まれていません。ここでの主な問題は、あなたが本当にそれを取得する必要があることです-あなたが私のUIにウィンドウを表示すると、私はあなたのプロセスでコードを実行できます。その後、Windowsメッセージを送信できます。これには、悪用される可能性のあるものがたくさんあります。通常は問題ではありません。ユーザーアプリの場合、ユーザーとしてできることしかできないからです。しかし、サービスに高い特権がある場合、セキュリティの悪夢になります。これが何年も前にこれが閉じられた理由であり、プログラミングを学び、ドキュメントを読む人は誰でもそれについて読むべきです
TomTom 14年

1
あなたが本当にそこに行きたい場合は、の手順を試みることができるcoretechnologies.com/WindowsServices/FAQ.html#GUIServicesを現在のウィンドウで確認してください彼らはまだ仕事ではないが、UIのaccessbileを作るための方法があります- -と、すべてのセキュリティ問題を開くには、 。
トムトム14年

0

Sessionプログラムが実行されるのはすべてです。誰もログインしていない場合、下に表示する対話型セッションSession 0はありません。下で実行されると信じています。これは、他の人のように表示されない奇妙なUIを持っています

これで、プログラムがexplorer.exe起動時(またはユーザーログインを検出する他の方法)を検出し、その新しいsessionidで魔法のように自身を変更したり、子プロセスを生成した場合、ログインしている人はあなたが何をしているかを喜んで見るでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.