程序(.NET)如何判断它是否以不同的用户身份运行?
问题描述:
有没有一种方法可以从我的.NET程序中检测到它是作为桌面用户正常运行还是作为不同的用户使用“以其他用户身份运行”菜单选项/ runas命令运行?程序(.NET)如何判断它是否以不同的用户身份运行?
答
让运行该程序的用户更容易,您可以使用Environment.UserName
或System.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"];
非常感谢。不幸的是,我想知道这一点的原因是当不同的用户使用/ separate开关时,启动资源管理器,但通常不是! – fangster 2013-02-26 14:22:01
谢谢,但有什么建议吗?我可能很愚蠢,但我盯着任务管理器,看不到合适的过程。 – fangster 2013-02-26 15:44:29
增加了另一个供使用的选项。 – Blachshma 2013-02-26 19:22:29