Windowsサービスと標準のexeの違いは何ですか?
コンピューターが起動すると、Windowsサービスは常に実行されます(そのように構成されている限り)。標準EXEは、ユーザーがログインしているときにのみ実行され、ユーザーがログアウトすると停止します。
ログインしているユーザーがいない場合でも常に実行する必要があるものには、Windowsサービスを使用します。
ログイン中にユーザーが実行するプログラムには、標準EXEを使用します。
Windowsサービスには特別な ServiceMain
関数があり、サービスとして機能するには、サービスコントロールマネージャー(SCM)コマンドに適切に応答する必要があります。一方、通常の実行可能ファイルにはmain
またはWinMain
関数があり、特定の制御コマンドに応答する必要はありません。
バックグラウンド操作の実装について話している場合、サービスまたはウィンドウなしの.exeを選択することをお勧めする基準は次のとおりです。
次の場合は、exeを選択します。
次の場合にサービスを選択します。
サービスはセキュリティホールになりやすいため、サービスよりも.exeを優先してください。両方が必要になる場合があります。ウイルスチェッカーは、ファイルシステム上のすべてのファイルにアクセスできる必要があります(現在のユーザーはアクセスできない場合があります)が、通知ダイアログ/ポップアップとツールの形式でユーザーに情報を提供する必要もあります。トレイのアイコン。サービスはユーザーのGUIと直接対話できません。パイプや共有メモリ領域など、標準のWindows IPC(プロセス間通信)サービス)を使用できます。このようなツールには、通常、サービスとユーザーごとのウィンドウレス.exeの両方があり、 Windowsパイプまたは共有メモリ領域を使用するサービス。
これらのトピックについて詳しく知りたい場合は、Keith Brownによる「Programming Windows Security」を入手してください。
サービスは(通常)UIのない標準のexeです。マシンにログインしているユーザーがいない場合でも実行でき、ファイルシステムのアクセス権と表示は、ログインしているユーザーに依存しません。
EXEバイナリの観点およびコンパイラのCライブラリの観点から見ると、Windowsサービスは標準のUnixプログラムまたはWindowsコンソールプログラムとまったく同じように見えます。つまり、main()
エントリポイントを使用します。サービスが異なる点は、サービスがMicrosoft Windowsによって(レジストリから、通常は起動時に)ロードまたは呼び出される方法です。サービスは、Windows API呼び出しを介してSC.exeアプリケーション[サービスコントロールマネージャー]に、サービスの開始、停止、一時停止などを通知できます(通知する必要があります)。