В Alpha.HMI для работы с переменными среды существует компонент Окружение: переменные среды процесса.
Переменные среды - это специальные значения, которые хранятся в операционной системе и используются для передачи информации между различными процессами и программами. Переменные содержат данные, такие как пути к исполняемым файлам, параметры конфигурации, настройки системы и многое другое.
Компонент Окружение: переменные среды процесса предоставляет вам возможность настраивать и управлять переменными среды для запускаемых процессов в вашем проекте. Это позволяет вам задавать свои собственные значения переменных или получать информацию о системных переменных среды.
Документация: Alpha.HMI 2.0 (ред. 19. Предварительная) > Руководство пользователя > Работа с файлами и оборудованием > Окружение: переменные среды процесса.
В некоторых случаях, требуется осуществить запись в системную или пользовательскую переменную, чтобы данные сохранялись после перезапуска процесса (приложения).
Однако, компонент Окружение: переменные среды не позволяет создавать/осуществлять запись в системные и пользовательские переменные.
Для данных целей можно использовать компонент Окружение: Процесс и работать с Windows PowerShell или cmd. Передать необходимые команды (создание/запись переменной) можно через аргументы запуска процесса.
Разберем на примерах.
Работа с PowerShell
Для работы с PowerShell из HMI, в свойствах элемента Окружение: Процесс пропишем путь до файла приложения:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Для создания пользовательской переменной в PowerShell можно выполнить команду вида:
[Environment]::SetEnvironmentVariable('ИМЯ_ПЕРЕМЕННОЙ', 'Значение', 'User')
Вместо 'User' указать 'Machine' – если необходимо создать системную переменную (требует прав администратора).
Команду прописываем в свойстве Аргументы запуска:
[Environment]::SetEnvironmentVariable(\"MY_VAR\", \"my_value\", \"User\")
Запуск процесса выполним по нажатию кнопки.
Таким образом, при выполнении процесса будет создана пользовательская переменная MY_VAR с значением my_value.
Мы также можем изменять аргументы запуска процесса в рантайм.
Добавим на форму поля ввода LineEdit_VAR и LineEdit_VALUE и две кнопки для создания пользовательской и системной переменной соответственно.
В событии нажатия кнопки, перед запуском процесса, пропишем аргументы запуска.
Команда, по аналогии с предыдущим примером , но ссылаемся на данные в полях ввода LineEdit_VAR и LineEdit_VALUE.
Process_1.Arguments = "[Environment]::SetEnvironmentVariable('"+ LineEdit_VAR.Text +"', '" + LineEdit_VALUE.Text +"','User')"; Process_1.Run();
(Для корректной передачи команды, будьте внимательны с кавычками)
И, аналогично, для системной переменной - 'User' меняем на 'Machine'
Таким образом можно создавать/изменять в HMI пользовательские и системные переменные
Работа с командной строкой.
Для создания пользовательской или системной переменной окружения через аргументы запуска CMD (командной строки Windows) можно использовать команду setx.
cmd /c setx Имя_Переменной Значение /M
/M – создаёт системную переменную (иначе будет пользовательская). Требуются права администратора
cmd /c – выполняет команду и закрывает CMD.
Команда setx в Windows — инструмент для создания новых и изменения существующих переменных среды окружения в командной строке.
На локальном компьютере переменные, созданные или измененные данным средством, будут доступны в будущем окне командной строки, но не в текущем окне CMD.exe.
Отредактируем, рассмотренный ранее пример, на работу с командной строкой (CMD)
В свойствах элемента Окружение: Процесс пропишем путь до приложения и аргументы запуска по умолчанию.
Процесс с аргументами запуска cmd /csetx MY_VARcmd my_value_cmd создаст пользовательскую переменную MY_VARcmd с значением my_value_cmd.
Аналогично, в событиях нажатия кнопок, пропишем аргументы запуска с привязкой к данным в полях ввода.
Для создания системной переменной пропишем ключ - /M
Таким образом, элемент Окружение: Процесс предоставляет возможность работы не только с отдельными переменными, но и с системной архитектурой в целом, используя инструменты командной строки и PowerShell.