Переменные среды Windows - проблемы с доступом к обновленным переменным среды в программе - PullRequest
0 голосов
/ 10 октября 2019

Я написал скрипт инициализации, который устанавливает переменные среды пользователя, которые являются ключами, которые были хешированы и зашифрованы ... После того, как ключи были созданы, ключ шифрования exe больше не требуется. Я хочу запустить основное приложение и удалить файл инициализации, содержащий функции хеширования и шифрования ключей.

У меня нет проблем с любым из вышеперечисленного ... Все работает, как и должно, независимо друг от друга. Проблема в том, что для того, чтобы основное приложение имело доступ к вновь созданным переменным среды, мне нужен сценарий инициализации, чтобы полностью завершить работу ...

Все, что я пробовал, Popen with flags, os.system ()а другие по-прежнему оставляют меня в ситуации, когда родительский процесс завершается и запускается основное приложение, однако переменные среды не обновляются ... Я закрываю и перезапускаю main.py и ... boom программа видит обновленные переменные ивсе в порядке.

Все, что мне нужно, это запустить скрипт init, запустить новый процесс, который вообще не связан с init.py, а затем выйти, чтобы его можно было удалить. Я думал, что это будет просто, но после многих часов царапин на голове и пробовать множество вещей, я все еще не ближе.

Если потребуется, я просто свяжу его как два отдельных файла .exe, но я хотел, чтобы это был тип установки в один клик.

Я использую Windows 10, и это может быть платформой. специфические.

Просмотренные ссылки:

Как остановить / прекратить запуск скрипта Python?

Использование вызова подпроцесса Python длявызвать скрипт Python

Запуск отдельного процесса

https://docs.python.org/2/library/subprocess.html

Python: Как запустить полный процесс, а недочерний процесс и получение PID

И еще ...

Текущий ближайший результат

p = Popen(["python","UserInterface.py"], stdin=PIPE, stdout=PIPE, stderr=PIPE,
      creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)

1 Ответ

1 голос
/ 11 октября 2019

Создайте блок среды, установите переменную среды, используя SetEnvironmentVariable, и используйте CreateProcess, чтобы указать этот блок среды для созданного процесса.

MSDN DOC :

Чтобы указать другую среду для процесса, создайте новый блок среды и передайте указатель на него в качестве параметра функции CreateProcess.

...

Чтобы программно добавить или изменить системные переменные среды, добавьте их в раздел реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment, а затем отправьте сообщение WM_SETTINGCHANGE с lParam, установленным в строку «Среда»,Это позволяет приложениям, таким как оболочка, забирать ваши обновления.

...