3

ウィンドウサービスを作成しています。私の要件は、特定の間隔でウィンドウ NT サービスからウィンドウ フォームを表示することです。テスト目的で、サービス開始時にフォームを表示したいだけです:

 protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart -before form show");

            Messager_Form obj = new Messager_Form();
            obj.Show();
           // System.Diagnostics.Process.Start("calc.exe");
            eventLog1.WriteEntry("In OnStart -after form show");
           // timer1.Start();
        }

それは機能しません。フォームが表示されておらず、計算プロセスも実行されていません。pop up を示すリンクをいくつか見つけまし たが、それらのほとんどは WCF を示唆しています。wcfなしでは不可能ですか?誰でもこれを達成する方法を教えてもらえますか?

4

3 に答える 3

6

できません*。Windows サービスとして動作しない後のオペレーティング システムでは、デスクトップとの対話が許可されていません。代わりに、Windows サービスによって提示される UI が、通常はエンド ユーザーには表示されない特別なログオン セッションであるSession 0に表示されます。

代わりに行うべきことは、常に実行されているが常に表示されているわけではない別の Windows フォームアプリケーションを作成し (おそらく、そのアプリケーションを起動時に実行し、通知領域にアイコンを表示する)、何らかの形式のIPCを使用して Windows サービスと通信することです。

Windows サービスがユーザーに何らかの UI を表示したい場合、アプリケーションにメッセージを送信します。これにより、必要な UI がエンド ユーザーに表示されます。

**または少なくとも絶対にすべきではありません*

于 2012-10-18T14:00:59.033 に答える
2

StackOverflow の別のリンクにある回答を参照しているだけです

デスクトップと対話するアプリケーションから Windows サービスと通信するにはどうすればよいですか?

答えは:

最終的に Windows Vista または Windows Server 2008 に展開することを計画している場合、現在実行できる多くの方法は機能しないことに注意してください。これは、「セッション 0 アイソレーション」と呼ばれる新しいセキュリティ機能が導入されたためです。

ほとんどの Windows サービスは、システムの残りの部分から適切に分離するために、セッション 0 で実行するように移動されました。これの拡張は、システムにログインする最初のユーザーがセッション #0 に配置されなくなり、セッション 1 に配置されることです。したがって、分離により、サービスとデスクトップ アプリケーション間の特定の種類の通信を行うコードが壊れます。

サービスとアプリケーション間の通信を行う際に、Vista および Server 2008 で動作するコードを現在作成する最善の方法は、RPC、名前付きパイプなどの適切なクロスプロセス API を使用することです。SendMessage/PostMessage は使用しないでください。セッション 0 アイソレーションで失敗します。

http://www.microsoft.com/whdc/system/vista/services.mspx

さて、あなたの要件を考えると、あなたは少し窮屈になるでしょう。クロスプラットフォームの問題については、Remoting がサポートされるかどうかはわかりません。ドロップダウンしてソケットに戻る必要がある場合があります: http://msdn.microsoft.com/en-us/library/system.net.sockets.aspx

于 2012-10-18T17:05:17.447 に答える
1

[Interact with desktop] ボックスをオンにすると、Windows NT、2000、XP、および 2003 で機能しますが、 Session 0 Isolationのおかげで、Windows Vista 以降では期待どおりに機能しなくなりました。インタラクティブなサービスを開発する前に、非常に慎重に検討する必要があります...

于 2012-10-18T13:45:53.563 に答える