web-dev-qa-db-ja.com

Windowsコンソールアプリとサービス

私の状況

私は他の多くの会社のためにソフトウェアを構築する会社で働いています。インストーラーがVS2012に組み込まれていないことを知ったとき、私は展開方法に興味を持っていました。これまでのところ、PowerShellスクリプトを使用してクライアントサーバーに.exeをドロップしています。次に、本格的なWindowsサービスが必要です。

コンソールアプリケーションを介してサービスを実行する方法の多くの例を見てきました。 https://stackoverflow.com/questions/7764088/net-console-application-as-windows-service

sc.exeこのようなコンソールアプリケーションに基づいてサービスを作成します。しかし、WindowsがStart/Stop/Restartをどのように処理するかはわかりません。

質問

このことから、コンソールアプリケーションとサービスの関係がWindowsの世界でどのような関係にあるのかが知りました。サービスは、OSが呼び出しを開始および停止できるようにするフックを備えたコンソールアプリケーションにすぎませんか?またはサービスは完全に異なりますか?

昔、WinFormsとコンソールアプリケーションはまったく異なるものだと思っていました。 Win32をいじり回した後、同じものであることに気付きました。

私の希望

サービスがWinFormsのような単なるコンソールアプリであり、.NETで直接Start/Stop機能を利用できることを願っています。組み込みのインストーラープロジェクトはかなりひどいものだったので、.exeをサーバーにコピーするのはそれほど悪くありません。

3
Travis Parks

コンソールアプリケーションがWindowsサービスとはまったく異なるとは言えません。どちらもコードを実行するホストです。そうは言っても、いくつかの重要な違いがあります:

  • ユーザーがPCにログインしていなくても、サービスを実行できます。
  • サービスは、ネットワークサービスやローカルシステムなどの権限の高いアカウントのコンテキストで実行するように簡単に構成できます。
  • サービスには、実行中に開始、停止、再起動、一時停止するためのフックが組み込まれています。
  • サービスにはコンソールが接続されておらず、標準出力に何も出力できませんが、代わりにシステムロギングを使用する必要があります(Martinへのクレジット)
6
Nathan