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

C# 在Windows服务中获取当前用户名,c#,windows-services,C#,Windows Services,我试过: var curUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 但是,在部署服务后,它将输出“NT AUTHORITY\SYSTEM”作为当前用户名。如果我正确理解您的问题,您希望从Windows服务检索Windows计算机上经过身份验证的用户(正确吗) 这将不起作用,因为服务不是在用户下运行的,而是在给定的帐户下运行的,该帐户可以是用户,但不需要是用户 一般来说,任何作为服务运行的应用程序都不需要

我试过:

var curUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

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

如果我正确理解您的问题,您希望从Windows服务检索Windows计算机上经过身份验证的用户(正确吗)

这将不起作用,因为服务不是在用户下运行的,而是在给定的帐户下运行的,该帐户可以是用户,但不需要是用户

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

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

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


我知道这不是你问题的答案,但我已经发布了这篇文章作为答案,以便能够提供一些描述和图片。我认为没有一个解决方案可以解决您试图实现的目标。

您所说的“当前用户”是什么意思?可以有多个用户登录到Windows。服务通常使用与登录用户不同的帐户运行。NT AUTHORITY\SYSTEM是您的服务正在使用的帐户。请尝试查看此处,其中有两个解决方案,在您运行Windows服务时使用WMI获取所有当前登录的用户:“不可能”这也是一个答案;)实际上这是可能的,但很棘手: