ユーザーが MSDTC サービスを制御するためのアクセス権を持っていることを確認しようとしています。実際には、最初のステップは、それが開始されていることを確認することであり、開始できるかどうかは重要ではありません。アプリケーションは .Net 4.0 を使用しているため、新しいセキュリティ モデルで実行されています。
次のコードは、必要なアクセス許可を持つユーザーで実行すると機能しますが、通常のユーザー (管理者以外) の Stop() メソッドでは失敗します。
var permission = new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "MSDTC");
permission.Demand(); // Is this even considered in .Net 4.0?
var MSDTC = new ServiceController("MSDTC", Environment.MachineName);
MSDTC.Stop(); // Crashes with "Access is denied" for an ordinary user.
MSDTC.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
MSDTC.Start();
それで、私の質問は、ユーザーが操作を実行するために必要な権限を持っていることを確認するにはどうすればよいですか? 一般に、レジスタなどの他のリソースについてこれを確認するにはどうすればよいですか?
私は解決策をかなり探しましたが、何も見つかりませんでした。もちろん、新しいセキュリティ モデルに関する MSDN ドキュメントを読みましたが、このシナリオで使用できるものは見つかりませんでした。