在Windows服务中获取当前用户名称

4
我尝试过:
var curUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

但是,在部署服务后,它会将“NT AUTHORITY\SYSTEM”作为当前用户名输出。


“当前用户”是什么意思?Windows系统中可能有多个用户同时登录。 - CodeCaster
1
服务通常在不同于“已登录”用户的帐户下运行。 - Lloyd
1
NT AUTHORITY\SYSTEM 是您的服务运行的帐户。 - Bolu
2
尝试查看这里,其中有几个使用WMI的解决方案,可以在运行Windows服务时获取所有当前已登录的用户:https://dev59.com/rG435IYBdhLWcg3wxDL_ - Martin
1个回答

5
如果我理解您的问题正确,您想从Windows服务中检索Windows机器上经过身份验证的用户(是吗)?
这不起作用,因为服务不在用户下运行,它们在给定帐户下运行,该帐户可以是用户,但不需要是。
一般来说,任何作为服务运行的内容都不需要用户登录,以使依赖于该服务的应用程序完全功能。实际上,这就是Windows NT服务模型的全部基础。
如果您登录,完成一些工作然后注销,您的登录会话启动的所有进程都将关闭(例如:应用程序可执行文件等),但服务不会受到影响。
下面的图像演示了正在运行的用户的位置:
我知道这不是您问题的答案,但我已发布此答案以提供一些说明和图片。我不认为有解决您要实现的目标的方法。

1
不可能 - user2345998
实际上这是可能的,但有些棘手:https://stackoverflow.com/questions/30759933/windows-service-get-username-when-user-log-on - Konrad
https://dev59.com/rG435IYBdhLWcg3wxDL_ - Konrad
https://stackoverflow.com/questions/21676225/how-to-get-current-windows-username-from-windows-service-in-multiuser-environmen - Konrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接