8

そのため、Visual Studio を使用して Windows サービスを作成するのは非常に簡単です。私の質問は、実際に実行可能ファイルをサービスとしてインストール可能にするものと、サービスをストレートな C アプリケーションとして作成する方法について、もう少し深くなります。これに関する多くの参照は見つかりませんでしたが、.exe をサービスとしてインストールできるように、実装できるインターフェイスが必要であると推測しています。

4

4 に答える 4

3

実行可能ファイルをサービスとして設定することはその一部ですが、実際には、通常、使用しているインストール ソフトウェアによって処理されます。テスト中 (またはインストーラーが必要ない場合) は、コマンド ライン 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;
}
于 2008-09-04T03:50:54.640 に答える
1

私はパーティーに少し遅れていることを知っていますが、最近同じ質問があり、回答を探してウェブ間で苦労しなければなりませんでした.

MSDN でこの記事を見つけることができましたが、実際には基礎を築いています。ここにある多くのファイルを、必要なすべてのコマンドを含む単一の exe に結合し、自分のニーズに応じてサービスの全期間にわたってループする独自の「void run()」メソッドを追加しました。

これは、まさにこの質問を持つ他の誰かにとって素晴らしいスタートになるので、将来の検索者はチェックしてください:

完全なサービス サンプル http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx

于 2009-07-28T15:46:02.800 に答える
1

お役に立てれば:

http://support.microsoft.com/kb/251192

このexeをバイナリ実行可能ファイルに対して実行して、サービスとして登録する必要があるようです。

于 2008-09-03T13:49:57.390 に答える
1

基本的に、設定する必要があるいくつかのレジストリ設定と、実装する必要があるいくつかのインターフェイスがあります。

これをチェックしてください:http://msdn.microsoft.com/en-us/library/ms685141.aspx

あなたは SCM (Service Control Manager) に興味があります。

于 2008-09-03T13:50:47.780 に答える