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

问题描述:

有没有一种方法可以从我的.NET程序中检测到它是作为桌面用户正常运行还是作为不同的用户使用“以其他用户身份运行”菜单选项/ runas命令运行?程序(.NET)如何判断它是否以不同的用户身份运行?

让运行该程序的用户更容易,您可以使用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"]; 
+0

非常感谢。不幸的是,我想知道这一点的原因是当不同的用户使用/ separate开关时,启动资源管理器,但通常不是! – fangster 2013-02-26 14:22:01

+0

谢谢,但有什么建议吗?我可能很愚蠢,但我盯着任务管理器,看不到合适的过程。 – fangster 2013-02-26 15:44:29

+0

增加了另一个供使用的选项。 – Blachshma 2013-02-26 19:22:29