WindowsサービスにGUIがないのはなぜですか?


22

XPやNTなどの以前のWindowsリリースでこの機能を使用していました。WindowsサービスからGUIを実行できました。しかし、それ以降のバージョンでは不可能です。

この機能が削除された理由は何ですか?WindowsサービスにGUIがないのはなぜですか?

回答:


47

主にセキュリティ上の理由。

、彼らは通常のみもIEでサービスが実行され、セッション0というセッションで見られたWindowsサービスは、メッセージボックスなどのGUIコントロールを作成するときに、私は、それを理解したように使用があることを最初のユーザーは、ローカルまたは使用上の誰かロギングしてログオンmstsc / admin。したがって、このユーザーにはこれらのコントロールが表示され、サービスと対話できます。

ただし、セキュリティ上の理由から、セッション0は予約されており、最初にログオンしたユーザーには新しいセッションが与えられるため、GUIコントロールは表示されません。

これは互換性のために非常に多くのサービスを中断するため、メッセージが表示されているかどうかを検出しようとするプロセス(このMSDNブログを参照と、「このコンピューターで実行中のプログラムはメッセージを表示しようとしています」というポップアップが表示されます'メッセージを表示または無視できます。

マイクロソフトでは、このテーマに関するWhitePaperを用意しており、こちらからダウンロードできます。

また、別の小さな理由は、機能が誤用/誤解され、設計が不適切だったためだと考えています。たとえば、イベントログに書き込むのではなく、メッセージボックスを使用していくつかの通知/エラーを表示するサードパーティのサービスを備えた古いサーバーを使用していました。しかし、ローカルにログオンしたことはなく、管理モードでログインすることはほとんどなかったため、メッセージは表示されませんでした。


1
UACと関係があると感じています。つまり、セキュリティを確保すると、UACプロンプトがワークステーションセッションをインタラクティブユーザーと共有できなかったり、ハッカーがUACプロンプトのふりをしたりする可能性があります。
gbjbaanb

23

以前は対話型サービスが可能でしたが、サービスモデルは、ユーザーとは無関係に実行されるプロセスのものです。これらは無人で実行されるように設計されているため、GUIは必要ありません。

Windows Vista以降、インタラクティブサービスは利用できなくなったため、使用しないでください。

サービスとやり取りする必要がある場合は、リンク先のページで、名前付きパイプなどの何らかのプロセス間通信(IPC)を介してサービスと通信する別のGUIアプリケーションを作成することをお勧めします。


あなたのliknは時代遅れです:サービスはWindows Vistaの時点でユーザーと直接対話できません。したがって、「対話型サービスの使用」というタイトルのセクションで説明した手法は、新しいコードでは使用しないでください。
-nemke

10

サービスはユーザーと対話せずにバックグラウンドで実行されることになっているためです。実際、ユーザーがログインしていないときに実行される場合があります。


次に、なぜこの機能が以前のバージョンにあったのですか?答えを考えると、Windowsサービスとデスクトップアプリケーションの間の通信はありません。したがって、この答えは適切ではありません。
アルン

3
@Arun-そのロジックに基づいて、壊れたものは決して修正されません。マイケルの答えは正解です。サービスにはギザギザはないはずです。以前のバージョンのWindowsに(GUIを使用したサービス)があったからといって、それらがあったはずではありませんでした。

8
@Arunデスクトップアプリとサービス間に通信が存在しないのは事実ではなく、単にサービス自体にGUIがないというだけです。むしろ、デスクトップアプリにはGUIがあり、サーバーと通信します。
ポールヒエムストラ

それで、WindowsサービスはGUIを使用できますが、GUIを使用すべきではありませんか?
アルン

1
@Arun、自分自身をGUIを持っていますが、多くの場合、何らかの方法でそれと通信することで、サービスを制御することができます別のフロントエンド・アプリケーションによって制御されているのdontサービス(名前付きパイプ、ソケットを経由して、...)
GrandmasterB

0

はい、それは可能であり、うまくいきました。ログインすると、アプリケーションのインターフェースが表示されます。これは、利用可能なサービスはないが、サーバー上で実行する必要がある古いアプリケーションに非常に役立ちました。最も安定したソリューションではありませんでしたが。クリックまたはログアウトできるユーザーとして実行されるようになりました。それはあまり良くありませんでした。

現在、誰もがネイティブサービスを開発し、アプリケーションまたはログを追加してサービスを管理しています。これは優れたデザインパターンであり、現在ほとんどの場合に使用されています。

そのため、それが可能であったことをよりレガシーと考えてください。


-1

サービスは、主にバックグラウンドでの無人操作を対象としています。ネームサービス自体は、一部のクライアントアプリケーションまたはこのサービスを使用する他のサービスのサーバーとして機能することを意味します。したがって、MSは今や基本に固執し、サービスとアプリを明確に区別したいと思うかもしれません。爪切りがあるのに、なぜ包丁で爪を切るのですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.