【发布时间】:2020-03-23 14:15:28
【问题描述】:
Windows 10 在启动时自动登录多个(本地)用户和程序。 所以我可能有一些“幽灵”用户登录一次,此时只有 1 个用户“活跃”
我需要在我的应用程序中识别用户是否真正处于活动状态(在会话中工作),而不仅仅是 Windows 在后台登录。
在 .NET 中有什么方法可以做到这一点吗? (来自非管理员帐户) 谷歌了很多,但数找到可靠的东西
附言。我发现 cmd 行命令 (qwinsta) 似乎在做我需要的事情 - 但我不知道如何从 C# 代码运行它并读取输出 (我正在接收未找到的 qwinsta)
请指教...
* 编辑 *
澄清:我不需要找到活动用户名(这很容易) 我希望获取有关本地计算机上所有会话的信息并检查哪些当前处于活动状态(请参见下面的命令行输出 qwinsta.exe)。
想象一下,所有本地用户都在启动我的应用程序 - 应用程序需要做某事,但只有当用户已解锁会话时,此时正在计算机前做某事(我个人不会通过这种 Windows-10 机制自动登录讨厌...)
qwinsta.exe 将为我完成工作,但如果我从 .NET 启动此过程,它总是说找不到 qwinsta.exe。即使我给出完整路径: c:\Windows\system32\qwinsta.exe
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console carl 1 Active
rdp-tcp 65536 Listen
【问题讨论】:
-
你能分享一些代码吗?
-
stackoverflow.com/questions/2017705/… 可能与您的要求有关...一些很好的说明您的意思是“活跃”会很好...
-
旁注:如果您对bing.com/search?q=c%23+process+start+read+output 上的现有答案有疑问,您应该发布需要minimal reproducible example 的调试问题...
-
如果您有一个 32 位应用程序在 WOW64 下的 64 位 Windows 中运行,则路径为“%SystemRoot%\SysNative\qwinsta.exe”。你应该知道在WOW64下运行时访问“System32”目录会重定向到“SysWOW64”。在这种情况下,您首先应该检查的是,您想要的文件是否实际上是作为“SysWOW64”中的 32 位程序分发的,方法是从 64 位进程(如 Explorer 或 CMD)检查它。您会发现它仅作为本机 64 位二进制文件分发,位于真正的“System32”目录中。这可以在 WOW64 下作为“SysNative”访问。
标签: c# windows session-state