从Windows服务中检索用户帐户名

问题描述:

如何从Windows服务中获取当前记录的用户帐户名?帐户不是本地的 - 它是域帐户。 我试过的每种方法都不好,只返回LocalService帐户。从Windows服务中检索用户帐户名

+3

Windows服务在没有任何用户登录的情况下运行。如果没有用户登录,您希望发生什么?如果有多人登录? – Oded

+0

配置服务时,“登录”选项卡上显示的内容是什么?你有什么特别的尝试? – CoreTech

+0

@Oded是的,Windows服务在没有任何用户登录的情况下运行,但Windows服务需要运行它的帐户。我相信他正在寻找Windows服务正在运行的帐户。 –

您的服务正在用户LocalService的上下文中运行。如果要获取登录到交互式/ RDP会话的用户名(可能不存在一个或多个记录的用户),则必须使用PInvoke使用终端服务API。这里是这个的起点:WTSEnumerateSessions

+2

服务_may_可以作为'LocalService'运行,但不必。 – Oded

+0

@Oded:“仅返回LocalService帐户。”我想我可以放心地认为服务*是作为LocalService运行的 – Novakov

我在System.Security.Principal命名空间中使用这种方法WindowsIdentity.GetCurrent(False).Name,它的工作。我运行VS2010和.NET Framework 4

我在服务中写入以下字符串到一个文本文件中添加一行:

String.Format("Currently logged on account: {0}", System.Security.Principal.WindowsIdentity.GetCurrent(False).Name) 

它返回相应的Windows帐户的Windows服务是运行。

当在帐户Local Service运行它返回NT AUTHORITY\LOCAL SERVICE

当在我的域帐户dom\name.lastname它返回DOM\Name.Lastname

您可以指定在该服务将在“登录”的标签运行的帐户运行服务属性对话框。