1

Windows Vista 以降では、サービスは GUI にアクセスできなくなりました。しかし、自分のサービスからヘルパー GUI アプリケーションにメッセージを渡す簡単なメカニズムを作成した後System.Windows.Forms.MessageBox.Show、「MessageBoxOptions」パラメーターが私の目を引いた、次のオーバーロードを見つけました。

public static DialogResult Show(
    string text,
    string caption,
    MessageBoxButtons buttons,
    MessageBoxIcon icon,
    MessageBoxDefaultButton defaultButton,
    MessageBoxOptions options
)

列挙型をより詳しく見ると、有効なオプションの 1 つが であり、MSDNMessageBoxOptions.ServiceNotification次のように述べられています。

アクティブ デスクトップにメッセージ ボックスが表示されます。呼び出し元は、ユーザーにイベントを通知するサービスです。この関数は、コンピュータにログオンしているユーザーがいない場合でも、現在アクティブなデスクトップにメッセージ ボックスを表示します。

これは、メソッドにこのオプションを渡すことMessageBox.Show()で、Vista、Windows 7 以降でヘルパー アプリケーションを使用しなくても、サービスからの単純なメッセージの表示を実際に処理できるということですか?

4

3 に答える 3

2

MESSAGEBOXOPTIONS ENUM DEMYSTIFIED - XP に適用

Windows Vista 以降では、Windows サービスによって生成されたユーザー インターフェイスは表示されません。さらに最悪の場合、何も表示されないため、ユーザーが提供できないユーザー入力を待機して、サービスがスタックする可能性があります。

ここから


Windows サービスで MessageBox を表示するには、メッセージを送信する必要があり WTSSendMessageます。セッション 0の特別なデスクトップに DialogBox が表示されます。

于 2013-01-11T15:01:42.523 に答える
1

はい、あなたが提案していることはうまくいきますが、本当にそれをしたいですか? デフォルトでは MessageBox.Show() はブロック操作であることに注意してください。一般に、サービスを UI 操作で待機させることは、非常に悪い習慣です。

あなたの質問への答えは「はい、でもやめてください」です。

于 2013-01-11T15:00:34.283 に答える