2016-07-24 22 views
-1

我寫了一個Windows服務。它在系統級運行。我使用下面的代碼來獲取登錄用戶的用戶名。但我想獲得該用戶會話的環境變量。我怎樣才能做到這一點?如何從Windows服務獲取指定用戶的環境變量?

DWORD sessionId = WTSGetActiveConsoleSessionId(); 
qInfo() << "session id = " << sessionId; 

wchar_t* ppBuffer[100]; 
DWORD bufferSize; 
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionId, WTSUserName, ppBuffer, &bufferSize); 
qInfo() << "Windows User Name = " << QString::fromWCharArray(*ppBuffer); 
+1

登錄用戶的好處是用戶配置文件已加載。這意味着您可以在HKEY_USERS下找到它們(顯然不是HKEY_CURRENT_USER,因爲您的服務可能不會在該用戶名下運行)。除此之外,請參閱http://stackoverflow.com/questions/573817/where-are-environment-variables-stored-in-registry – MSalters

+0

無法確定HKEY_USERS下的哪個子項目代表指定的用戶。此外,某些環境變量包含「%USERPROFILE%」,但對於HKEY_USERS下的一個子項目找出%USERPROFILE%的值不太容易。 – Finix

+0

未加載,您的服務以其配置運行的任何帳戶運行。您必須知道用戶的SID,以便您可以在HKEY_USERS內部戳。這仍然只給你一個用戶會話初始化的環境,它不會告訴你有關用戶可能應用的環境覆蓋的任何信息。您還必須處理沒有登錄的用戶或登錄的多個用戶。處理服務中的用戶會話是一個非常糟糕的主意。使用運行註冊表項或啓動文件夾中的快捷方式啓動的普通程序。 –

回答

相關問題