我想在进程以管理员身份运行时显示一些额外的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. 获取当前脚本Powershell是否以管理员身份执行(以管理员身份运行)
- 4. 程序(.NET)如何判断它是否以不同的用户身份运行?
- 5. 以管理员身份运行实例
- 6. CreateProcess以管理员身份运行
- 7. Java:以管理员身份运行
- 8. WNetGetConnection并以管理员身份运行
- 9. 以管理员身份运行R
- 10. 以管理员身份运行链接
- 11. 以用户身份从Visual Studios进行调试,以管理员身份运行
- 12. 如何使安装程序以管理员身份运行
- 13. 如何判断进程是否由服务控制管理器运行
- 14. 以管理员身份进行身份验证
- 15. 以用户身份进行管理员身份验证
- 16. 在Windows 7中,“以管理员身份运行”,当UAC被关闭不以管理员身份运行
- 17. 如何以teamcity的管理员身份运行visual studio或nunit
- 18. 如何安装以管理员身份运行的Windows服务?
- 19. 我如何检查我的程序是否以用户身份作为管理员运行(Vista/Win7,C++)
- 20. 以管理员身份运行的dotnet核心应用程序
- 21. 是否可以以管理员的身份默默运行一些东西
- 22. 如何在启动时以管理员身份运行脚本
- 23. Powershell和Python - 如何以管理员身份运行命令
- 24. 如何以管理员身份运行CMD.exe
- 25. 以管理员身份运行Visual Studio是否存在任何缺陷
- 26. 以管理员身份定期运行Eclipse是否有任何优势?
- 27. 从“快捷方式”运行,并“以管理员身份运行”
- 28. 是否可以将VS2010配置为始终以管理员身份运行?
- 29. WiX安装程序应始终以管理员身份运行
- 30. VB6应用程序'以管理员身份运行'问题
的回答是一样的: 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