我想在進程以管理員身份運行時顯示一些額外的UI元素,而不是在Visual Studio 2008以admin身份運行時在其標題欄中顯示「管理員」的方式。我怎麼知道?如何判斷我的進程是否以管理員身份運行?
回答
從技術上講,如果你想看看如果成員是本地管理員帳戶,那麼你可以通過User
property上WindowsIdentity
class獲取當前用戶的security identifier (SID),像這樣(靜態GetCurrent
method獲取當前的Windows用戶):
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
string sid = windowsIdentity.User.ToString();
的User
屬性返回用戶哪個has a number of predefined values for various groups and users的SID。
S-1-5- {其他SID部分} -500
或者,如果你不想解析字符串,可以使用SecurityIdentifier
類:
// Get the built-in administrator account.
var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid,
null);
// Compare to the current user.
bool isBuiltInAdmin = (windowsIdentity.User == sid);
Howeve r,我懷疑你真的想知道的是,如果當前用戶是本地機器的管理員組的成員。您可以使用WellKnownSidType
BuiltinAdministratorsSid
的得到這個SID:
// Get the SID of the admin group on the local machine.
var localAdminGroupSid = new SecurityIdentifier(
WellKnownSidType.BuiltinAdministratorsSid, null);
然後你就可以檢查用戶的WindowsIdentity
的Groups
property,看看用戶是本地管理員組的成員,像這樣:
bool isLocalAdmin = windowsIdentity.Groups.
Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
Any(s => s == localAdminGroupSid);
我認爲這是一個很好的簡單機制。
using System.Security.Principal;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
我覺得重要的是要注意我有嘗試使用上面WellKnownSidType.BuiltinAdministratorsSid每casperOne的答案的難度。根據WellKnownSiDType MSDN,BuiltinAdministratorsSid「表示與管理員帳戶匹配的SID」。所以我希望casperOne的代碼能夠工作,並且猜測它可能會在某些環境中使用。不幸的是,它沒有在我的Windows 2003上使用.NET 2.0(遺留代碼)。它實際上返回了S-1-5-32-544,根據this article是管理員組的sid。因此,我的比較失敗了。我將不得不對自己的字符串進行比較,以便開始使用「S-1-5-21」(kb243330表示包含「21」,儘管上面引用的博客沒有)並以「500」結尾。
這是一個單線程來做到這一點。
using System.Security.Principal;
static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
- 1. 如何以管理員身份運行?
- 2. 如何以管理員身份運行?
- 3. 以管理員身份運行程序
- 4. 檢測另一個進程是否以「以管理員身份運行」啓動
- 5. VB.Net - 使用'以管理員身份運行'進程執行vbscript
- 6. 獲取當前腳本Powershell是否以管理員身份執行(以管理員身份運行)
- 7. 程序(.NET)如何判斷它是否以不同的用戶身份運行?
- 8. 以管理員身份運行實例
- 9. C#以管理員身份運行CMD
- 10. 以管理員身份運行R
- 11. 以管理員身份運行VBS
- 12. 以管理員身份運行鏈接
- 13. CreateProcess以管理員身份運行
- 14. Java:以管理員身份運行
- 15. WNetGetConnection並以管理員身份運行
- 16. 我的應用程序將以管理員身份運行嗎?
- 17. C++控制檯應用程序提示「以管理員身份運行」以管理員身份運行?
- 18. VB6是以管理員身份運行的應用程序
- 19. 以用戶身份從Visual Studios進行調試,以管理員身份運行
- 20. 如何使安裝程序以管理員身份運行
- 21. 如何以管理員身份運行批處理?
- 22. 如何判斷進程是否由服務控制管理器運行
- 23. 以用戶身份進行管理員身份驗證
- 24. Firebase以管理員身份進行身份驗證
- 25. 以管理員身份進行身份驗證
- 26. 以管理員身份進行身份驗證?
- 27. 在Windows 7中,「以管理員身份運行」,當UAC被關閉不以管理員身份運行
- 28. 如果VS以管理員身份運行並且outlook不是
- 29. 我可以在Windows上以管理員身份運行PyCharm嗎?
- 30. 如何安裝以管理員身份運行的Windows服務?
的回答是一樣的: http://stackoverflow.com/questions/95912/how-can-i-detect-if-my-process-is-running-uac-elevated-or-而不是 – DSO 2009-02-03 22:53:02
也看看這裏http://www.blackwasp.co.uk/CheckAdmin.aspx – 2012-04-27 13:44:52