そのため、Visual Studio を使用して Windows サービスを作成するのは非常に簡単です。私の質問は、実際に実行可能ファイルをサービスとしてインストール可能にするものと、サービスをストレートな C アプリケーションとして作成する方法について、もう少し深くなります。これに関する多くの参照は見つかりませんでしたが、.exe をサービスとしてインストールできるように、実装できるインターフェイスが必要であると推測しています。
4 に答える
実行可能ファイルをサービスとして設定することはその一部ですが、実際には、通常、使用しているインストール ソフトウェアによって処理されます。テスト中 (またはインストーラーが必要ない場合) は、コマンド ライン SC ツールを使用できます。
重要なことは、プログラムが起動時に StartServiceCtrlDispatcher() を呼び出さなければならないということです。これにより、サービスがサービス コントロール マネージャーに接続され、サービスのメイン エントリ ポイントである ServiceMain ルーチンがセットアップされます。
ServiceMain (実際には好きなように呼び出すことができますが、常に ServiceMain のように見えます) は、特定のイベントが発生したときに OS がサービスに通知できるように、RegisterServiceCtrlHandlerEx() を呼び出してコールバック ルーチンを定義する必要があります。
以下は、私が数年前に書いたサービスの抜粋です。
サービスとして設定:
SERVICE_TABLE_ENTRY ServiceStartTable[] =
{
{ "ServiceName", ServiceMain },
{ 0, 0 }
};
if (!StartServiceCtrlDispatcher(ServiceStartTable))
{
DWORD err = GetLastError();
if (err == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
return false;
}
サービスメイン:
void WINAPI ServiceMain(DWORD, LPTSTR*)
{
hServiceStatus = RegisterServiceCtrlHandlerEx("ServiceName", ServiceHandlerProc, 0);
サービス ハンドラ:
DWORD WINAPI ServiceHandlerProc(DWORD ControlCode, DWORD, void*, void*)
{
switch (ControlCode)
{
case SERVICE_CONTROL_INTERROGATE :
// update OS about our status
case SERVICE_CONTROL_STOP :
// shut down service
}
return 0;
}
私はパーティーに少し遅れていることを知っていますが、最近同じ質問があり、回答を探してウェブ間で苦労しなければなりませんでした.
MSDN でこの記事を見つけることができましたが、実際には基礎を築いています。ここにある多くのファイルを、必要なすべてのコマンドを含む単一の exe に結合し、自分のニーズに応じてサービスの全期間にわたってループする独自の「void run()」メソッドを追加しました。
これは、まさにこの質問を持つ他の誰かにとって素晴らしいスタートになるので、将来の検索者はチェックしてください:
完全なサービス サンプル http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx
基本的に、設定する必要があるいくつかのレジストリ設定と、実装する必要があるいくつかのインターフェイスがあります。
これをチェックしてください:http://msdn.microsoft.com/en-us/library/ms685141.aspx
あなたは SCM (Service Control Manager) に興味があります。