Как обновить копию системных переменных (environment variable)?

При запуске .exe не явно делается копия всех env vars. Для примера, есть системная переменная MY_ENV_VAR_FOO = hello и мой .exe использует эту переменную. Но скажем, нам нужно поменять значение этой переменной на MY_ENV_VAR_FOO = hello word (не закрывая наш .exe).

В чем проблема? .exe имеет копию системных переменных и он ничего не знает о том, что какое то из значений было изменено.

Для того, чтоб .exe принял новые значения нужно его переоткрыть. Это можно сделать по разному, как один из примеров можно просто закрыть и открыть его заново вручную или (у меня так) с помощью скрипта который закроет и откроет его заново. Мой .exe имеет логику которая знает как запустить этот скрипт который сделает перезагрузку .exe.

Я написал этот скрипт потому, что у меня нет прямого доступа к .exe и я хочу, чтоб он сам перезагружался(так как есть эта логика).

Скрипт такой

set MY_TARGET=C:\My_program

taskkill /IM My_program.exe /F

@echo off
if %errorlevel% NEQ 0  echo ERROR!!! & goto :exit
@echo on

timeout 10

start "" %MY_TARGET%\My_program.exe

:exit

Скрипт закрывает .exe и через 10 сек открывает его заново.

После его выполнения выглядит все так, мы обновили системную переменную, запустился скрипт, закрыл .exe, открыл его заново через 10 сек. и вроде как все в порядке.

Но проблема в том, что каждый новый запущеный процесс берет копию системных переменных из процесса который его запускает.

Как я говорил выше .exe имеет логику которая запускает скрипт который перегружает .exe и что получается, обновили переменную .exe ничего не знает об этом обновлении и хранит копию переменных до того как было обновление, запускает скрипт, скрипт берет копию переменных того процесса который его запустил (наш .exe, копия которая не обновленная), закрывает .exe и через 10 сек запускает его заново, при запуске .exe берет копию процесса который его запустил (то есть скрипт который имеет не обновленную копию) и в итоге вновь открывшейся .exe имеет туже копию переменных с которыми он закрылся. То есть ничего не обновилось.

Вопрос - можно ли как то обновить копию системных переменных? Может есть что то вроде refresh_env_vars_command команда, которую нужно добавить в скрипт между закрытием .exe и его открытием заново?


Ответы (0 шт):