找出另一个应用程序是否以管理员身份运行

时间:2015-07-27 21:36:42

标签: c# process wmi

我试图确定另一个应用程序是否以管理员身份运行。有100个关于查找您的申请是否适用的SO问题,但不适用于其他申请。

如果我执行var processes = Process.GetProcesses();并循环播放,则他们似乎没有任何"提升"或者" IsAdministrator"它们的属性。我还在这里找到了一个功能,以获得所有者,但他们都回来了"我的笔记本电脑\我"因此,我不按照我希望的方式为我工作。

有没有办法找到这个?我在Win 8.1上并且更喜欢适用于7的东西,但是如果它仅适用于8.1+,那就完全没问题。

谢谢!

修改 我的应用程序必须以管理员身份运行。

2 个答案:

答案 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

如果您查看代码(那里有相当多的代码),它会获得进程"用户令牌" (进程正在运行的权限)并检查此令牌是否具有管理员角色,