有没有办法从我的.NET程序中检测它是以正常桌面用户身份运行,还是使用“以其他用户身份运行”菜单选项/ runas命令以其他用户身份运行?
答案 0 :(得分:4)
让运行程序的用户更容易,您可以使用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"];