C#で書かれたWindowsサービスは、特定のパラメーターが渡された場合にコンソールアプリケーションとしてコマンドラインから実行できるように設定されています。素晴らしいですが、私は、アプリケーションがサービスコントロールマネージャーまたはコマンドラインから実行されているかどうかを検出できることが大好きです。サービスコントロールマネージャーによってプロセスが実行されているかどうかを確認する方法
実行時に私のアプリケーションがSCMによって起動されたかどうかを知る方法はありますか?
C#で書かれたWindowsサービスは、特定のパラメーターが渡された場合にコンソールアプリケーションとしてコマンドラインから実行できるように設定されています。素晴らしいですが、私は、アプリケーションがサービスコントロールマネージャーまたはコマンドラインから実行されているかどうかを検出できることが大好きです。サービスコントロールマネージャーによってプロセスが実行されているかどうかを確認する方法
実行時に私のアプリケーションがSCMによって起動されたかどうかを知る方法はありますか?
Environment.UserInteractiveプロセスがSCMで実行されている場合はfalseを返します。
SCMはOnStartメソッドを呼び出すため、そのイベントをマークして、コマンドラインから実行したときにOnStartを呼び出さないようにすることができます。または、起動パラメータを確認して、アプリケーションの起動方法を確認することもできます。
Cでは、StartServiceCtrlDispatcher()
はERROR_FAILED_SERVICE_CONTROLLER_CONNECT
で失敗します。これはC言語での最良の方法ですが、C#がこれを公開しているのだろうか?
ERROR_FAILED_SERVICE_CONTROLLER_CONNECTプログラムはコンソールアプリケーションとしてではなく、サービスとして実行されている場合、このエラーが返され
。プログラムをデバッグ目的でコンソールアプリケーションとして実行する場合は、このエラーが返されたときにサービス固有のコードが呼び出されないようにプログラムを構成します。
これは、SCMの[サービスとデスクトップとの対話を許可する]オプションを有効にしない限りうまく動作します。私たちのサービスには問題ありません。おかげでGuardi! – BrettRobi