3

友人に自動メールを送信するために、ドット ネットで Windows サービスを作成していました。すべてがうまくいっています。今、メールが送信されたことを示すポップアップを表示するなどの要件があります。しかし、そのロジックを実装するにはアイデアが必要です。Windows サービスの UI を使用することはできないと思います。だから私は別のWindowsアプリケーションを作成してポップアップメッセージを表示し、メールが送信されたときにWindowsサービスからこれを呼び出すことを考えました。これは単なるアイデアであり、この正しいアプローチかどうかはわかりません。私を案内してください。

ありがとう。

4

5 に答える 5

6

Windows サービスに GUI がないという制限はありません。Windows サービスは GUI を持つことができます。しかし、ある場合は、サービス 0 に表示されました。Vista より前の以前のバージョンの Windows では可能でした。それについて詳細な議論をしましょう。
      ユーザーが Windows にログインするたびに、ログオン セッションが作成されます。各セッションにはセッション ID があります。すべての Windows サービスはセッション 0 で実行されます
      。セッション 0 では、ユーザーは、Windows NT、2000、XP、Server 2003 などの以前のバージョンで Windows サービスによって作成されたものを含め、そこで実行されているプログラムのグラフィック要素を表示して操作できます。
       その後、セキュリティ上の懸念により、Microsoft はセッション 0 を分離しました。その影響は、サービスが GUI を表示できないことです。これはその一例です。
       サービスがセッション 0 で、ダイアログ ボックスなどのユーザー インターフェイス (UI) を作成しようとしたとします。サービス 0 が分離されているため、ユーザーはセッション 0 で実行されていないため、UI が表示されることはありません。サービスが探している入力を提供できません。発生しないユーザー応答を待っているため、サービスが機能を停止しているように見えます。
      この分離により、サービスは Windows メッセージを介してアプリケーションと通信できず、その逆も同様です。サービスとアプリケーション間の通信には、RPC、Interactive Services Detection Service (ISDS)、および IPC を使用します。

于 2012-12-28T10:33:36.870 に答える
3

Windows サービスの UI を使用することはできないと思います。

それは部分的に正しいです:

Microsoft Windows サービス [..] にはユーザー インターフェイスが表示されません。

@Arunの回答を参照してください。

そのため、ユーザーとのインターフェイスを行う GUI を使用しプロセスが必要になります。これら 2 つのアプリケーション (サービスと GUI) が通信できるようにするには、プロセス間通信(IPC) を調べる必要があります。

C# で使用できる IPC メカニズムの概要については、この質問を参照してください。ただし、一般的には、WCF を使用することをお勧めします。

于 2012-12-28T09:23:11.800 に答える
2

IMO の最も簡単な方法は、トレイに座って Windows サービスからの通知を待つ別の Windows アプリを作成することです。通信にはWCFを使用できます。私は同様の解決策を持っており、非常にうまく機能します。

このプロセス間通信の例を参照してください。

http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

于 2012-12-28T09:19:47.477 に答える
1

このトピックに関する説明については、Windows サービス FAQ の「Windows サービスに GUI を使用できますか」を参照してください。

技術的には、WTSSendMessage 関数は (最新バージョンの Windows でも) ドアを開いたままにしますが、他の人が示唆しているように、「ヘッドレス」サービス アプリケーションを設計し、別の GUI コンポーネントに依存してユーザーと対話する方がはるかに優れています。

于 2012-12-28T13:47:39.613 に答える
-1

ポップボックスを表示することができます。名前空間を追加することで、Windows サービスに GUI を追加できます System.Windows.Forms。その前に、ソリューション エクスプローラーにある [参照] タブを右クリックして、この名前空間を追加します。

これで任意の GUI コントロールを使用できます。例えば:

MessageBox.Show("mailed succesfuly");
于 2013-09-25T18:57:44.460 に答える