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

Cod*_*man 4 c# windows-services

我试过:

var curUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Run Code Online (Sandbox Code Playgroud)

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

Com*_*ity 5

如果我正确理解了您的问题,您想从您的 Windows 服务中检索 Windows 机器上经过身份验证的用户(是否正确)?

这是行不通的,因为服务不是在用户下运行的,它们是在给定的帐户下运行的,该帐户可以是用户,但不一定是用户。

一般来说,作为服务运行的任何东西都不需要用户登录,依赖于该服务的应用程序才能完全正常运行。实际上,这就是 Windows NT 服务模型的全部基础。

如果您登录,做一些工作然后注销,您的登录会话启动的所有进程将被关闭(例如:应用程序可执行文件等),但服务将不受影响。

下图演示了指定运行用户的位置:

在此处输入图片说明

我知道这不是您问题的答案,但我已将此作为答案发布,以便能够提供一些描述和图像。我不认为您想要实现的目标有解决方案。