6

ユーザーが昇格された管理者として実行されているかどうかを検出する必要がある C# アプリケーションを開発しています。スティーブンが提案した解決策を試しました。

5 台のマシンでこのソリューションを確認しましたが、そのうちの 4 台で正常に動作します。

ユーザー アカウント制御を に設定しても、UAC 通知メッセージが表示されないマシンが 1 台ありますAlways notify me

そのマシンでコードを確認すると、 を選択run as administratorしても機能せず、メソッドIsProcessElevatedは false を返します。

その特定のマシンに何か問題がありますか?

そのようなプラットフォームで、ユーザーが昇格しているかどうかを判断する方法はありますか?

4

2 に答える 2

10

調査の結果、Windows 7以降、ユーザーが昇格した管理者であるかどうかを判断するには、次のことを確認する必要があることがわかりました。

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole (WindowsBuiltInRole.Administrator);

(このオプションが失敗した場合に備えて、トークンをチェックする残りのコードを使用できます)一部のマシンでコードをテストしましたが、問題なく動作します。

私のアプリケーションはwin7以降でのみ実行されるため、このソリューションで十分です。

于 2012-08-30T15:32:05.033 に答える
0

ばかげた質問かもしれませんが、常に通知するように UAC を変更した後、マシンを再起動しましたか?

同じ問題があり、マシンを再起動しない限り UAC ステータスが変更されないため、問題は Windows 自体にありました。

試してみて、このリンクこれも確認してください。

于 2012-08-30T14:13:38.790 に答える