2013-10-02 20 views
0

我有一個Windows窗體應用程序將在域和非域(本地桌面)環境中運行。我試圖瞭解Windows安全性如何在這些不同的環境中工作。我需要以編程方式確定何時運行我的應用程序作爲管理員,我認爲是不同的域和本地環境(可能當UAC在控制??)。Windows中的安全性和確定privillges在.net

我也有點困惑,如果UAC取代域名登錄,如果打開?

我希望該產品的大多數遠程用戶也將被設置爲本地管理員,並受到UAC的限制。

如何在這些條件下檢查特權? (vb.net應用程序,但c#也很好 - 謝謝)

乾杯,蒂姆。

回答

1
Public Function isWindowsAdministrator() As Boolean 
    My.User.InitializeWithWindowsUser() 
    If My.User.IsAuthenticated Then 
     If My.User.IsInRole(Microsoft.VisualBasic.ApplicationServices.BuiltInRole.Administrator) Then 
      Return True 
     End If 
    End If 
    Return False 
End Function 

有可能是一個nonVB /「純」 NET選擇,我只是不知道等同。還有一種方法可以測試用戶是否可以升級到Admin,但這是一個PInvoke,凌亂的win32的東西,並且實際上並沒有提升,只是測試。

UAC仍然會彈出,以上只是讓你提前知道用戶是否可以授權。

+0

感謝您的解決方案 - 我曾試過這個,但錯過了'initializeWithWindowsUser,因此沒有得到任何迴應。我試圖將用戶名和域名變成Principal.WindowsIdentity並從那裏去。我會標記答案,但我已經找到了另一種解決方案,並得到它的工作,我也想分享。再次感謝 –

0

Vb.Net:

公共功能IsUserAnAdmin()爲布爾 結束函數

C#:

[的DllImport( 「SHELL32.DLL」)] 公共靜態的extern BOOL IsUserAnAdmin() ;

正如你所看到的通過調用IsUserAnAdmin(顯然你可以使用別名)返回一個布爾值。爲清晰起見,我相信這適用於我提到的所有場景,但我還沒有完全完成我的域測試....但

+0

該方法是簡短而又甜蜜的......並且不推薦使用「CheckTokenMembership」。還有分割令牌的問題(一些特權被剝離)。有辦法檢查,但它需要3或4個interop並調用'advapi32.dll'。這是非常徹底和可靠的,但我不喜歡互通電話。爲了簡單起見,我更喜歡我發佈的.NET版本,它可能會失敗的實例不是我的錯。順便說一句'接受'並不意味着你答應使用答案,只是它的工作http://stackoverflow.com/about – Plutonix