【问题标题】:Using CreateProcessAsUser in python does not pass the user's environment to the created process在 python 中使用 CreateProcessAsUser 不会将用户的环境传递给创建的进程
【发布时间】:2015-11-18 11:20:07
【问题描述】:

首先感谢您抽出宝贵时间阅读此问题。

我使用以下代码从 Interactive user 下的 Windows 服务成功启动了一个应用程序可执行文件(我们称之为 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:\Users\ 交互式用户名 \AppData\Roaming

但是返回值是:

C:\Windows\System32\config\systemprofile\AppData\Roaming

这意味着虽然 MyApp.exe 是在 interactive 用户的 名称下启动的,但它会获得运行 windows 服务的 SYSTEM 用户的环境。

我的问题是如何获取属于用户而不是系统的环境路径。

非常感谢,

附注我正在使用 py2exe 将 MyApp 和 Windows 服务转换为可执行文件。

【问题讨论】:

    标签: python windows-services user-environment


    【解决方案1】:

    我找到了答案,以防有人感兴趣:

    根据this如果没有明确指定环境,则进程继承父进程的环境。使用this 可以获取环境并将其传递给 CreateProcessAsUser。

    只需按照以下代码中的环境词即可。

    #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
    environment = win32profile.CreateEnvironmentBlock(console_user_token, False)
    handle, thread_id ,pid, tid = win32process.CreateProcessAsUser(console_user_token, my_app_path, None, None, None, True, priority, environment, None, startup)
    

    【讨论】:

    • jan,非常感谢。这解决了我的问题!
    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2013-06-05
    • 2021-02-19
    • 2014-12-30
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多