4

別のサービス (B) を開始/停止する必要がある Windows サービス (A) をインストールするインストーラーを作成しました。ただし、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();
}

このサービスへのアクセスが拒否されるのはなぜですか?

4

2 に答える 2

11

サービスは UAC 昇格を要求できません。あなたが説明したUACプロンプトは、実際にはサービスではなくインストーラーによって要求されているようです。通常、サービスは非常に特権のあるアカウントで実行されます (既定では LocalSystem)。制限されたユーザー アカウントではなく、そのような特権アカウントを使用するようにサービスを構成してください。

于 2010-09-20T20:14:57.263 に答える
1

簡単なテストとして、サーバーを開いてservices.msc"run as" にチェックし、資格情報を入力すると、エラーは解消されますか? LocalService が他のサービスを停止するためのアクセス権を持っていない可能性があります。UACプロンプト権限を提供すると、最初にサービスをインストールできるようになるだけで、管理者として実行するように指示されない可能性があります.

于 2010-09-20T20:06:35.537 に答える