程序(.NET)如何判断它是否以不同的用户身份运行?

时间:2013-02-26 12:48:42

标签: .net runas

有没有办法从我的.NET程序中检测它是以正常桌面用户身份运行,还是使用“以其他用户身份运行”菜单选项/ runas命令以其他用户身份运行?

1 个答案:

答案 0 :(得分:4)

让运行程序的用户更容易,您可以使用Environment.UserNameSystem.Security.Principal.WindowsIdentity.GetCurrent().Name 它们之间的差异链接位于......

之下

现在,让 登录用户 更加棘手。
我使用以下方法(我想我在这里发现了它一段时间)。它的作用是检查谁是explorer.exe进程的所有者(登录用户):

private string GetExplorerUser()
{
    var query = new ObjectQuery(
        "SELECT * FROM Win32_Process WHERE Name = 'explorer.exe'");

    var explorerProcesses = new ManagementObjectSearcher(query).Get();

    foreach (ManagementObject mo in explorerProcesses)
    {
       String[] ownerInfo = new string[2];
       mo.InvokeMethod("GetOwner", (object[])ownerInfo);

       return String.Concat(ownerInfo[1], @"\", ownerInfo[0]);
    }

    return string.Empty;
}

上述方法需要System.Managment dll

<强>更新 基于OP的评论,上述方法工作正常 - 增加了另一个选项:

Win32_ComputerSystem获取第一个用户名:

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
 ManagementObjectCollection collection = searcher.Get();
 string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];