1
首先感謝您閱讀此問題。在Python中使用CreateProcessAsUser不會將用戶環境傳遞到創建的進程
我開始一個應用程序的可執行文件(可以稱之爲MyApp.exe將)使用下面的代碼交互式用戶下從我的窗口服務成功:
#MyWindowsService.py
console_session_id = win32ts.WTSGetActiveConsoleSessionId()
console_user_token = win32ts.WTSQueryUserToken(console_session_id)
my_app_path= os.path.normpath(r"/Path\to\MyApp.exe")
startup = win32process.STARTUPINFO()
priority = win32con.NORMAL_PRIORITY_CLASS
handle, thread_id ,pid, tid = win32process.CreateProcessAsUser(console_user_token, my_app_path, None, None, None, True, priority, None, None, startup)
從內MyApp的,我需要獲取屬於交互式用戶的環境路徑。比如我用下面的代碼來獲取用戶的%APPDATA%的路徑:
#MyApp.py
user_app_data_path = os.getenv('APPDATA')
它應該返回:
C:\用戶\ 交互式用戶名 \應用程序數據\漫遊
但是返回的值是:
C:\ WINDOWS \ system32 \設置\ systemprofile \應用程序數據\漫遊
這意味着儘管MyApp.exe是在交互式用戶的名稱下啓動的,但它獲取了運行Windows服務的用戶的環境SYSTEM。
我的問題是我如何獲得屬於用戶而不是系統的環境路徑。
許多感謝,
附:我正在使用py2exe將MyApp和Windows服務轉換爲可執行文件。