2012-01-25 65 views
0

如何從Windows服務中獲取當前記錄的用戶帳戶名?帳戶不是本地的 - 它是域帳戶。 我試過的每種方法都不好,只返回LocalService帳戶。從Windows服務中檢索用戶帳戶名

+3

Windows服務在沒有任何用戶登錄的情況下運行。如果沒有用戶登錄,您希望發生什麼?如果有多人登錄? – Oded

+0

配置服務時,「登錄」選項卡上顯示的內容是什麼?你有什麼特別的嘗試? – CoreTech

+0

@Oded是的,Windows服務在沒有任何用戶登錄的情況下運行,但Windows服務需要運行它的帳戶。我相信他正在尋找Windows服務正在運行的帳戶。 –

回答

-1

您的服務正在用戶LocalService的上下文中運行。如果要獲取登錄到交互式/ RDP會話的用戶名(可能不存在一個或多個記錄的用戶),則必須使用PInvoke使用終端服務API。這裏是這個的起點:WTSEnumerateSessions

+2

服務_may_可以作爲'LocalService'運行,但不必。 – Oded

+0

@Oded:「僅返回LocalService帳戶。」我想我可以放心地認爲服務*是作爲LocalService運行的 – Novakov

0

我在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

您可以指定在該服務將在「登錄」的標籤運行的帳戶運行服務屬性對話框。