まず、真にインタラクティブな Windows サービスを作成する適切な方法をいくつか知っています。
状況は、ユーザーと対話しないツールを持っていることです。ただし、ポップアップ ウィンドウと Windows 通知領域 (別名システム トレイ) の両方を介して非ブロック通知を表示します。 また、表示する通知のログファイルも書き込みます。
このツールは通常、メイン ユーザー アプリケーションによって生成され、メイン アプリケーションが通常のアプリケーションである限り、これらの通知は意図したとおりに機能します。
このツールが Windows サービスによって生成されると、通知は当然表示されません。(サービスのデスクトップ セッションは表示されません。) しかし、これで問題ありません。ログ ファイルがあり、これらの通知は単なる通知であり、すべての状況でユーザーが絶対に表示する必要があるものではありません。
問題は次のようになります:サービス(サービス自体またはそれが開始するプロセス)のコンテキストで実行されているプロセスは、目に見える GUI を表示する Windows API 呼び出しを行うことが "許可" されていますか?
- ほとんどの Windows API 呼び出し (たとえば、ウィンドウの作成と表示、Shell_NotifyIconの使用など) は、サービスの非表示セッションで同じように動作しますか?
- または、サービスのコンテキストでGUIの表示/変更が呼び出されないように、ソースコード全体で確認する必要がありますか?
そして、はい、::MessageBoxを呼び出すのはブロックされるため、悪い考えです。しかし、私はこれらの呼び出しを処理できます。
はい、これはより適切に設計される可能性がありますが、現時点ではこれがあり、GUI 関連のコードがサービスで実行されないようにするためにツール全体をバラバラにする必要がなければいいでしょう。