製品を構成するサービスを管理するアプリケーションに取り組んでいます。これまで、このアプリケーションは昇格で開始されることが予見されていました (そのため、ユーザーは 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 に「動作させる」「特別なコード」が含まれていることを提案しました。私もそれを購入しません)。
回答ありがとうございます。