我想擴展用戶特定的環境變量。我有用於「ExpandEnvironmentStringsForUser」的API。我的代碼在服務環境中運行。我想獲取當前登錄的用戶。每當我使用GetUserName API時,它都會返回「SYSTEM」。我如何在服務上下文中獲取用戶名
我的問題是我想在用戶特定模式下而不是在系統模式下擴展%temp%。 當我的代碼在服務上下文中運行時,是否有任何方式可以獲取當前登錄的用戶?
我想擴展用戶特定的環境變量。我有用於「ExpandEnvironmentStringsForUser」的API。我的代碼在服務環境中運行。我想獲取當前登錄的用戶。每當我使用GetUserName API時,它都會返回「SYSTEM」。我如何在服務上下文中獲取用戶名
我的問題是我想在用戶特定模式下而不是在系統模式下擴展%temp%。 當我的代碼在服務上下文中運行時,是否有任何方式可以獲取當前登錄的用戶?
如果您的程序作爲服務運行,那麼不是「已登錄的用戶」。多用戶系統的整個概念使這樣一個概念變得毫無意義。可能有多個用戶登錄,並且您的程序無法猜測您希望它假裝在哪個用戶下運行。
你的問題就像是問我「所有的家庭成員,我的汽車停在誰的臥室裏?」事實上,汽車在車道外安全而正常地坐在外面。
您可以使用qwinsta
命令(終端服務的一部分)獲取當前登錄用戶的列表,然後執行相關操作;這將有絕對無關,與你的服務,但在某些Windows系統,允許在同一時間(許可證的原因)只有一個互動環節,這將是唯一的一個標記Active
:
C:\Users\tomalak>qwinsta
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console tomalak 1 Active
這儘管如此,有點冒險;通常你會有一個小的用戶空間應用程序,可以與後端服務通話,並在應用程序中執行所有用戶特定的惡意程序。
您意識到服務不會與用戶運行服務的用戶會話(通常是系統)交互,不是嗎? – SirDarius