D'abord, merci de lire cette question.L'utilisation de CreateProcessAsUser en python ne transmet pas l'environnement de l'utilisateur au processus créé
Je commence un exécutable de l'application (permet de l'appeler MyApp.exe) avec succès de mon service Windows sous le utilisateur interactif en utilisant le code suivant:
#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)
De l'intérieur MyApp je dois obtenir les chemins d'environnement qui appartiennent à l'utilisateur interactif . Par exemple, j'utilise le code suivant pour obtenir le chemin pour% AppData de% de l'utilisateur:
#MyApp.py
user_app_data_path = os.getenv('APPDATA')
Il devrait retourner:
C: \ Users \ Interactive-user-name \ AppData \ Roaming
Cependant, la valeur retournée est:
C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Roaming
Ce qui signifie que bien que MyApp.exe soit démarré sous nom de l'utilisateur interactif, il obtient l'environnement SYSTEM utilisateur que le service Windows exécute sous.
Ma question est de savoir comment je peux obtenir les chemins d'environnement qui appartiennent à l'utilisateur et non au système.
Un grand merci,
post-scriptum J'utilise py2exe pour convertir le service MyApp et Windows en exécutables.