2014-06-25 52 views
0

我想擴展用戶特定的環境變量。我有用於「ExpandEnvironmentStringsForUser」的API。我的代碼在服務環境中運行。我想獲取當前登錄的用戶。每當我使用GetUserName API時,它都會返回「SYSTEM」。我如何在服務上下文中獲取用戶名

我的問題是我想在用戶特定模式下而不是在系統模式下擴展%temp%。 當我的代碼在服務上下文中運行時,是否有任何方式可以獲取當前登錄的用戶?

+3

您意識到服務不會與用戶運行服務的用戶會話(通常是系統)交互,不是嗎? – SirDarius

回答

5

如果您的程序作爲服務運行,那麼不是「已登錄的用戶」。多用戶系統的整個概念使這樣一個概念變得毫無意義。可能有多個用戶登錄,並且您的程序無法猜測您希望它假裝在哪個用戶下運行。

你的問題就像是問我「所有的家庭成員,我的汽車停在誰的臥室裏?」事實上,汽車在車道外安全而正常地坐在外面。

您可以使用qwinsta命令(終端服務的一部分)獲取當前登錄用戶的列表,然後執行相關操作;這將有絕對無關,與你的服務,但在某些Windows系統,允許在同一時間(許可證的原因)只有一個互動環節,這將是唯一的一個標記Active

C:\Users\tomalak>qwinsta 
SESSIONNAME  USERNAME     ID STATE TYPE  DEVICE 
services         0 Disc 
>console   tomalak     1 Active 

這儘管如此,有點冒險;通常你會有一個小的用戶空間應用程序,可以與後端服務通話,並在應用程序中執行所有用戶特定的惡意程序。

相關問題