web-dev-qa-db-ja.com

Windowsサービスは標準のexeとどのように異なりますか?

Windowsサービスと標準のexeの違いは何ですか?

42
LearningCSharp

コンピューターが起動すると、Windowsサービスは常に実行されます(そのように構成されている限り)。標準EXEは、ユーザーがログインしているときにのみ実行され、ユーザーがログアウトすると停止します。

ログインしているユーザーがいない場合でも常に実行する必要があるものには、Windowsサービスを使用します。

ログイン中にユーザーが実行するプログラムには、標準EXEを使用します。

44
Eric J.

Windowsサービスには特別な ServiceMain 関数があり、サービスとして機能するには、サービスコントロールマネージャー(SCM)コマンドに適切に応答する必要があります。一方、通常の実行可能ファイルにはmainまたはWinMain関数があり、特定の制御コマンドに応答する必要はありません。

35
Greg Hewgill

バックグラウンド操作の実装について話している場合、サービスまたはウィンドウなしの.exeを選択することをお勧めする基準は次のとおりです。

次の場合は、exeを選択します。

  • ユーザーごとに、ユーザーがログインしているときにのみ実行する必要があります。
  • Windowsデスクトップ(通知アイコンなど)と対話するために必要です。
  • ログインしたユーザーのすべての権限が必要です(それ以上でもそれ以下でもありません)

次の場合にサービスを選択します。

  • 誰もログインしていないときに実行する必要があるかもしれません
  • 通常、ユーザーごとのデータや権限は必要ありません
  • ネットワークとのみ通信します
  • 新しい「セキュリティ保護可能な」オブジェクトを公開する必要があります。特定のアカウント/グループへのアクセスを制限する独自の宣言的アクセス制御リスト(DACL)を持つオブジェクト。
  • ログインしたユーザーが利用できない特別な権限が必要です。

サービスはセキュリティホールになりやすいため、サービスよりも.exeを優先してください。両方が必要になる場合があります。ウイルスチェッカーは、ファイルシステム上のすべてのファイルにアクセスできる必要があります(現在のユーザーはアクセスできない場合があります)が、通知ダイアログ/ポップアップとツールの形式でユーザーに情報を提供する必要もあります。トレイのアイコン。サービスはユーザーのGUIと直接対話できません。パイプや共有メモリ領域など、標準のWindows IPC(プロセス間通信)サービス)を使用できます。このようなツールには、通常、サービスとユーザーごとのウィンドウレス.exeの両方があり、 Windowsパイプまたは共有メモリ領域を使用するサービス。

これらのトピックについて詳しく知りたい場合は、Keith Brownによる「Programming Windows Security」を入手してください。

12

サービスは(通常)UIのない​​標準のexeです。マシンにログインしているユーザーがいない場合でも実行でき、ファイルシステムのアクセス権と表示は、ログインしているユーザーに依存しません。

2
John Knoeller

EXEバイナリの観点およびコンパイラのCライブラリの観点から見ると、Windowsサービスは標準のUnixプログラムまたはWindowsコンソールプログラムとまったく同じように見えます。つまり、main()エントリポイントを使用します。サービスが異なる点は、サービスがMicrosoft Windowsによって(レジストリから、通常は起動時に)ロードまたは呼び出される方法です。サービスは、Windows API呼び出しを介してSC.exeアプリケーション[サービスコントロールマネージャー]に、サービスの開始、停止、一時停止などを通知できます(通知する必要があります)。

1
unixman83