我试图确定另一个应用程序是否以管理员身份运行。有100个关于查找您的申请是否适用的SO问题,但不适用于其他申请。
如果我执行var processes = Process.GetProcesses();
并循环播放,则他们似乎没有任何"提升"或者" IsAdministrator"它们的属性。我还在这里找到了一个功能,以获得所有者,但他们都回来了"我的笔记本电脑\我"因此,我不按照我希望的方式为我工作。
有没有办法找到这个?我在Win 8.1上并且更喜欢适用于7的东西,但是如果它仅适用于8.1+,那就完全没问题。
谢谢!
修改 我的应用程序必须以管理员身份运行。
答案 0 :(得分:1)
假设您的进程不以管理员身份运行,尝试获取有关通过UAC提升的进程的信息(例如其MainWindowTitle
)将抛出AccessDenied异常,其中为非 - 升级过程将允许您访问该信息。这假设您还要验证流程的所有者以检查您的身份。
try
{
var foo = process.MainWindowTitle;
return false; //Process is not elevated
}
catch (Win32Exception ex)
{
return true; //Process is elevated if ex error code is AccessDenied
}
答案 1 :(得分:1)
您可以使用this answer中的技术,只需将Process.GetCurrentProcess().Handle
替换为其他流程的Process.Handle
。
如果您查看代码(那里有相当多的代码),它会获得进程"用户令牌" (进程正在运行的权限)并检查此令牌是否具有管理员角色,