Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Установить переменную в cmd.exe

Автор вопроса: npocmakaОтветов: 2

Приветствую землян,

Вот мой вопрос:

Как я могу создать программу, которая устанавливает переменную для текущего сеанса cmd.exe, например.

c:\> set myvar
Environment variable myvar not defined
c:\>myexe.exe
c:>set myvar
myvar=myvalue

Единственная похожая тема, которую я нашел, это -

Как изменить оболочку Windows (cmd.exe) переменные окружения из C++?

Но я не понял ни слова из этого:

Есть способ... Просто введите свой код в родительский процесс и вызовите SetEnvironmentVariableA внутри памяти процесса cmd. После инъекции просто освободите выделенную память.

Хотя C/C++ не является моим "родным" языком, я чувствовал себя совершенно потерянным, когда искал в Google "код для ввода C++" и т. д. Есть ли статья, где я могу получить больше информации об этом.

Кстати, теперь я использую один немного глупый обходной путь. Как установить переменную в

HKEY_CURRENT_USER\Окружающая среда

и

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

сравнительно легко, я просто записываю аналогичную переменную в реестр:

load.temp.vars=set myvar1=myval1&set myvar2=myval2& ....

а затем просто вызовите %load.temp.vars% и он будет выполнен как команда:

c:/>%load.temp.vars%
c:/>set myvar1
myvar1=myval1

Работает нормально, но мне этого мало :)

Живи долго и процветай, \\//_

  • возможный дубликат Возможно ли изменить среду родительского процесса в python? Hans Passant 10.07.2010

cmdwindowsc++shellvariables

Ответы

Ответ 1 · рейтинг 2 · atzz

Прочтите эту статью: Три способа внедрить свой код в другой процесс .

Также вам, вероятно, понадобится дескриптор вашего родительского процесса (чтобы определить целевой процесс, среду которого нужно изменить). Способ его получения описан здесь а>.

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

Ответ 2 · рейтинг 2 · Oleg

Есть очень простой способ сделать это без всяких хитростей.

Вы должны написать небольшую программу myexe.exe, которая выводит простой вывод (консольный вывод), как показано ниже:

SET myvar=Some value

затем вы начинаете свою программу со следующих шагов:

myexe.exe >%TEMP%\t.cmd
call %TEMP%\t.cmd
del %TEMP%\t.cmd

Теперь в текущем cmd.exe, который запустил myexe.exe, существует переменная окружения myvar и она имеет значение Some value. Это не совсем то, что вы хотите?

Способ предельно прост и работает на всех версиях Windows (и не только на Windows). Так что это моя рекомендация для вас.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы