管理者として実行されるWindowsサービスをインストールするにはどうすればよいですか?
-
04-10-2019 - |
質問
別のサービスを開始/停止する必要があるWindowsサービス(a)をインストールするインストーラーを作成しました(b)。ただし、AがBを開始/停止しようとすると、この例外が表示されます。
System.InvalidOperationException:コンピューターでMyServiceサービスを開くことはできません」。 ---> System.comPonentModel.win32Exception:アクセスは拒否されます
インストーラーはローカルサービスとしてサービスをインストールし、UACポップアップを介して管理者の権利を要求します。また、App.manifestファイルをサービスに追加しました。これは、管理者の権利を要求するように設定されています。
それでも、私はまだそのエラーを受けています。
これが私がサービスを開始する方法です(もちろん、停止を呼び出すことを除いて、停止は同じです):
using (Mutex mutex = new Mutex(false, "MyServiceLock"))
{
mutex.WaitOne();
if (ServiceExists(serviceName) == true)
{
using (ServiceController serviceController = new ServiceController(serviceName, "."))
{
serviceController.Start(); // this line throws the exception
}
}
mutex.ReleaseMutex();
}
なぜこのサービスへのアクセスが拒否されるのでしょうか?
解決
サービスはUACの標高を要求することはできません。あなたが説明するUACのプロンプトは、サービスではなく、インストーラーによって実際に要求されていると私には聞こえます。サービスは通常、非常に特権的なアカウントで実行されています。制限付きユーザーアカウントではなく、このような特権アカウントを使用するようにサービスを構成するようにしてください。
他のヒント
簡単なテストとして、開いている場合 services.msc
サーバーを確認して「Asを実行」し、資格情報を入力して、エラーは消えますか? LocalServiceが他のサービスを停止するためのアクセス権がない可能性があります。 UACの迅速な許可を提供することは、最初にサービスをインストールすることができる可能性が高いため、管理者として実行するように指示することはできません。