其他人必须确定当前登录用户在Windows 7环境中远程用户是谁?我使用的是.NET 4.0和C#。 XP和7混合了环境。
PsLoggedOn
用于我的目的需要太长时间(是的,300毫秒太长)并且100%的时间出乎意料地不准确WTSGetActiveConsoleSessionID
或LsaEnumerateLogonSessions
使用p / invoke过于复杂,容易出现内存泄漏(从我读过的内容)tasklist /S <computername>
将返回XP系统的信息,但由于可爱的UAC,Windows 7将不会令人满意。 到目前为止,最可靠的方法是使用PsExec
从命令行远程执行qwinsta
并远程遍历输出到文本。这很烦人,需要时间(超过PsLoggedOn
),但我在这里的可靠性已经不多了。速度前的可靠性,但速度在成本效益方面非常重要。
第三方工具不是一个选项,必须是一个脚本,最好是WMI和C#。我钻研了使用Principal对象击中DC,但我担心我可能会更加困惑自己。此外,所有用户帐户都是管理员。
我已经对谷歌进行过很多研究,但我在想,也许我正在寻找错误的地方。
任何参赛者?
答案 0 :(得分:0)
您可以通过浏览Win32_ComputerSystem课程的UserName
属性来实现这一目标:
ConnectionOptions con = new ConnectionOptions();
con.Username = "Administrator";
con.Password = "********";
ManagementScope scope = new ManagementScope(@"\\" + strIPAddress + @"\root\cimv2", con);
scope.Connect();
//check for scope.IsConnected, then process
ManagementObjectSearcher searcher =new ManagementObjectSearcher(@"\\" + strIPAddress + @"\root\cimv2", "SELECT * FROM Win32_ComputerSystem");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_ComputerSystem instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("UserName: {0}", queryObj["UserName"]);
}
答案 1 :(得分:-1)
我想最好的方法是使用System.Environment.UserInteractive
。