2

特定のイベントに基づいてアプリケーションでWindowsサービスを開始および停止する必要があります。このアプリケーションは、(サービスを停止するために)昇格した通常のユーザーとして実行する必要があります。また、Windowsの起動時に自動起動する必要があります。さらに、ユーザーインターフェイスを備えたシステムトレイにある必要があります。

ここでの私のオプションは何ですか?
少なくとも2つの可能性があると思います。

  1. アプリケーションをスタートアップフォルダまたはレジストリの..\Runキーに配置して、アプリケーションを自動起動するには。しかし、問題は、Windowsが起動するたびにUACプロンプトダイアログがポップアップせずにこれを実行できるかどうかです。
  2. システムとして実行するためにインストールされたWindowsサービスを開発し、sysトレイに別のGUIアプリを配置します。しかし、昇格されたサービスと通常のsysトレイアプリの間で通信するために私がここに持っているIPCの可能性は何ですか?

何か考えや推奨事項はありますか?

4

4 に答える 4

1

間違いなくオプション 2 を使用し、具体的には WCF (Windows Communication Foundation) を使用して wsHTTPS バインディングを使用して Windows サービスと通信し、ログインしているユーザーが Windows サービスによってホストされている WCF サービスでアクションを実行できることを認証できるようにします。

于 2010-02-26T00:12:17.063 に答える
0

スケジュールされたタスク機能を使用して、目的を達成できます。スケジューリングには、ユーザーがログオンするたびにプログラムを実行するようにスケジュールするオプションがあります。別の資格情報を使用してタスクを実行するためのオプションがあります。

これをプログラムで設定する方法は説明できませんでしたが (おそらく WMI インターフェイスが用意されています)、UI から簡単に設定できます。

于 2010-02-27T00:31:22.207 に答える
0

番号 1 については、管理者権限でアプリケーションを実行するために、UAC ダイアログがポップアップしない限り、または管理者パスワードを持っていなければ、アプリケーションを実行することは不可能です。

2 番目については、これは興味深いトピックです。例とソース コードを含む優れた記事がここにあります。異なるアプリ間で通信するための最良の方法だと確信しています。

于 2010-02-25T23:56:57.603 に答える
0

実際に番号 1 を使用すると、いくつかのプロセスをチェーンして、UAC ダイアログなしで昇格したプロセスを実現できます。このような

最初のプロセス -> 管理者として起動 (資格情報を提供する方法が必要です) -> ShellExecuteを使用して別のプロセスを起動し、Runas 動詞を提供します。→最終工程

于 2010-02-26T00:04:53.707 に答える