2

プログラムを Windows サービスとして登録します。Windows を再起動すると、サービスは永久に START_PENDING になります。トレースした後、CreateService 関数でハングしていることがわかりました。

hService=CreateService( hSCManager,
                            pszDriverName,
                            pszDriverName,
                            SERVICE_ALL_ACCESS,
                            SERVICE_KERNEL_DRIVER,
                            SERVICE_DEMAND_START,
                            SERVICE_ERROR_NORMAL,
                            pszDriverPath,
                            NULL,
                            NULL,
                            NULL,
                            NULL,
                            NULL);

再起動する前にサービスを作成することで問題を解決できますが、ハングの原因を知りたいです。誰にもアイデアはありますか?

4

2 に答える 2

1

確かに、サービスは 1 回だけ作成する必要があります。CreateService 関数を再度呼び出す必要はありません。また、Windows の起動プロセス中に作成することはお勧めしません。

次の MSDN の例でわかるように、サービスを作成するには、"install" コマンド ライン引数を指定してサンプル ソフトウェアを起動する必要があります。それ以外の場合、サービスはインストール済みと見なされます。

この例では、StartServiceCtrlDispatcher 関数を使用してサービスのメイン関数 (この場合は SvcMain) を起動していることに注意してください。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb540476(v=vs.85).aspx

于 2012-06-04T13:37:54.220 に答える
0

サービスを持つアプリケーションには通常、サービスを登録してインストールするインストーラーがあります。アプリケーションをインストールすると、すべてのサービスが作成および登録されるため、システムの起動中に再度インストールする必要はありません。Windows は、サービスの開始時にこの関数を通常の関数として実行します。

上記の機能は、新しいサービスを作成する必要があるときに、インストーラーでサービスのインストールに使用されます。

于 2012-06-04T16:04:52.490 に答える