"C"でサービスを作成しています。ユーザーがサービスを停止しようとすると警告ウィンドウが表示されます( "OK"と "キャンセル"ボタン)。ユーザーがサービスを停止しようとすると警告ウィンドウが表示される
これを実現するための特定のウィンドウAPIがありますか? 他にも簡単な方法がありますか?
"C"でサービスを作成しています。ユーザーがサービスを停止しようとすると警告ウィンドウが表示されます( "OK"と "キャンセル"ボタン)。ユーザーがサービスを停止しようとすると警告ウィンドウが表示される
これを実現するための特定のウィンドウAPIがありますか? 他にも簡単な方法がありますか?
いいえ、これはできません。 Windowsサービスはユーザーのデスクトップと直接対話できないため、どのような種類のユーザーインターフェイスも表示できません。
これは本当に大きな問題ではありません。サービスを停止および開始するのに必要な権限が必要です。デフォルトでは、管理者だけがその権限を持っています。ユーザーが誤ってサービスを停止しないようにするには、その問題を解決するためのアクセス許可を活用する必要があります。
サービスコントロールパネルでサービスを停止します。あなたのサービスは通常、このコントロールパネルのプロセスにアクセスすることができないので、そのUIを上書きしてOK/Cancelを求めるダイアログを表示することはできません。
サービスからUIに呼び出されたすべての呼び出しによってハングする難しい方法を知りました。 MSDNには回避策に関するページhereがあります。
「**重要**サービスはWindows Vistaのようにユーザーと直接対話できません。したがって、対話型サービスの使用」の項で説明した方法は、 * –
まだダイアログボックスを表示するためのWTSSendMessage関数があります。より高度なものが必要な場合は、隠されたGUIアプリケーションを作成する必要があるように思えます。この記事でも話しています。 – WithMetta
問題は、そのメッセージを受信するためにログインしたユーザーが常に存在することを保証できないということです。そして、特定のユーザーコンテキストで動作するGUIアプリケーションを作成し、IPCメカニズムを介してサービスと通信することもできますが、サービスを停止する前に強制的にそのアプリケーションを終了していないという保証はありません。どちらかといえば、他にもたくさんのシナリオがあなたのマシンをぶら下げてしまいます。おそらく彼が望むものではありません。これは、既に壊れているアプリケーションをデバッグしたり混乱させたり、新しいアプリケーションを書き込んだりすることを意図したストップギャップの回避策です。 –
誰かがサービスを停止できないようにするには、サービスマネージャーに停止メッセージを受け入れないよう伝えてください。代わりに、(IPCの何らかの形式を使用して)サービスを停止するアプリケーションを提供し、そのアプリケーションが望むだけ多くの警告メッセージを表示することができます。
一方、このはになりますので、必要はありません。デフォルトでは、管理者だけがサービスを停止することができ、正当な理由がなくてもサービスを停止しようとする可能性は低いです。
[Windowsサービスを停止するにはユーザーを制限する](0120-18753) – Deanna