我试过了:
var curUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
但是,它在部署服务后将输出“NT AUTHORITY \ SYSTEM”作为当前用户名。
答案 0 :(得分:4)
如果我正确理解您的问题,您希望从Windows服务中检索Windows机器上的经过身份验证的用户(这是正确的)吗?
这不起作用,因为服务不在用户下运行,它们在给定帐户下运行,该帐户可以是用户,但不一定是。
一般而言,作为服务运行的任何内容都不需要用户登录依赖于该服务的应用程序才能完全正常运行。实际上,这是Windows NT服务模型的全部基础。
如果您登录,做一些工作然后注销,您的登录会话启动的所有进程将被关闭(例如:应用程序可执行文件等),但服务将不受影响。
下图显示了指定正在运行的用户的位置:
我知道这不是你问题的答案,但我发布了这个作为答案,能够提供一些描述和图像。我认为没有一个解决方案可以帮助您实现目标。