Win32_LogonSession返回不正确的值

时间:2016-07-08 17:36:55

标签: c# wmi

没有任何谷歌搜索让我随处可见。

我有以下代码,用于检查用户是通过控制台还是RDP登录到PC。

它运行正常,但问题是在用户注销后,WMI(或其他某些地方)仍然认为他们已登录,并且在这种情况下,返回true时应该返回{{1 }}

如果我重启电脑,它会回到0,直到我登录。

我准备接受这可能是WMI中的一个错误,所以如果有人有更好的选择来实现同样的事情,我会非常感谢这些建议。

false

1 个答案:

答案 0 :(得分:0)

另一种方法(假设您的进程在本地系统或某个特权帐户下作为服务运行)将获取所有正在运行的进程,为这些进程创建不同的用户名列表(不包括所有系统帐户,如“SYSTEM”) ,“网络服务”,“本地服务”)以及您在WMI查询的“where”子句中包含的任何类型的剩余唯一userIds应该给您一些想法。当然,有人可能会设置一个服务在用户帐户下运行,这可能会为您搞砸,在运行IIS的服务器或其他创建特殊用户帐户的应用程序上,您可能还需要解决这些问题。

您可能必须包含上面WMI查询的反转,以获取非交互式会话列表以及与其关联的userId,以了解要排除的内容。您也可以只查找您知道仅由交互式会话使用的进程(如“dwm.exe”和“explorer.exe”)。