1

製品を構成するサービスを管理するアプリケーションに取り組んでいます。これまで、このアプリケーションは昇格で開始されることが予見されていました (そのため、ユーザーは UAC プロンプトを確認する必要がありました)。サービスの停止の開始など、ほとんどの操作では、昇格は必要ないように見えました。

アプリケーションは通常、ローカルの Administrators グループのメンバーによって実行されます。これらのユーザーは services.msc を開始でき、サービスを開始および停止できます。だから私はそれが「うまくいく」と思っていました:

ServiceController sc = new ServiceController(Environment.MachineName, "MyServiceApp");
sc.Start();

「アクセス拒否」例外で失敗します。だから私は追加しました

ServiceControllerPermission scp = 
    new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "MyServiceApp");
scp.Demand();
ServiceController sc = new ServiceController(Environment.MachineName, "MyServiceApp");
sc.Start();

Demand は成功しますが、Start はまだ失敗します。

ServiceController と StackExchange のセキュリティに関する問題について、多くの質問 (および回答) を読みました。多くの回答は、昇格が必要であることを示唆しています。私 (私はローカル管理者グループのメンバーです) は services.msc の使用を開始および停止できるので、購入しないでください。

では、services.msc はどうなっていますか?私のコードはどうなっていますか? UAC を有効にしていますが、無効にしたくありません。サービスを開始または停止するために、昇格は必要ありませんよね? そうしないと、services.msc にも昇格が必要になりますか? (私の同僚は、services.msc に「動作させる」「特別なコード」が含まれていることを提案しました。私もそれを購入しません)。

回答ありがとうございます。

4

1 に答える 1

0

Services.msc (mmc.exe) は、必ずしも昇格/管理者権限で実行されているわけではありません。

プログラムを昇格して実行するように Windows に要求する「特別なコード」を作成できます。マニフェスト ファイルを使用します。

.NET アプリケーションを強制的に管理者として実行するにはどうすればよいですか? https://stackoverflow.com/a/4084620/787893

于 2013-12-17T11:54:01.867 に答える