2012-08-14 41 views
6

我正在開發一個需要檢測用戶是否以高級管理員身份運行的C#應用​​程序。我試過了Steven建議的solution無法檢測用戶是否使用提升的權限運行,當沒有UAC彈出窗口

我檢查了5臺機器上的解決方案,它在其中4個上正常工作。

即使將用戶帳戶控制設置爲Always notify me,也有一臺機器從不顯示UAC通知消息。

當檢查該機器上的代碼時,即使我選擇run as administrator,它也不起作用,並且方法IsProcessElevated返回false。

該特定機器有問題嗎?

有沒有一種方法來確定用戶是否升高或不升級,在這種平臺上?

+0

我會檢查機器是否有所有最新的服務包等,然後再試一次。 – 2012-08-14 15:10:48

+0

有一些替代解決方案來檢查UAC [這裏](http://stackoverflow.com/questions/95912/how-can-i-detect-if-my-process-is-running-uac-elevated-or-not )。是否有可能嘗試其中一種,看看它是否有效? – Default 2012-08-14 15:14:31

+1

這聽起來像是那臺電腦有問題,而不是代碼。如果您明確地將其配置爲提示,則應該獲得UAC提示。你不是。這表明系統本身存在問題。 – 2012-08-14 19:40:09

回答

10

研究後,我發現,從Windows 7上,以確定用戶是否升高管理員或不是你只需要檢查以下內容:

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

(該代碼的其餘部分檢查令牌可以用於防止此選項失敗) 我測試了一些機器上的代碼,它工作正常。

我的應用程序只在win7及以上版本上運行,所以這個解決方案對我來說已經足夠了。

+1

+1不錯的工作。 OP鏈接給我的問題在掃描時有點混亂,因爲它有一個非常令人誤解的標題。 – 2013-07-02 12:18:07

+0

此代碼也適用於Windows 8.1。 – codechurn 2014-07-01 16:52:42

0

問這可能很愚蠢,但在您更改UAC以始終通知我之後,您是否重新啓動機器?

我有同樣的問題,並且問題出現在Windows本身,因爲除非您重新啓動計算機,否則UAC狀態不會更改。

試試看,還請檢查this linkthis

相關問題