Как вызвать переменные окружения в команде runas для контекстного меню правой кнопкой мыши


1

У меня возникли проблемы с использованием переменных среды с использованием runasпри использовании команды в реестре для команды контекстного меню правой кнопкой мыши. Я пробовал разные способы экранирования переменной, однако runasимеет другой синтаксис, который не объяснен.

Я использую пользовательскую команду в реестре для контекстного меню правой кнопкой мыши. Например, я пытаюсь сделать новую команду правой кнопкой мыши, например HKEY_USERS\<some user account>\Software\Classes\Msi.Package\shell\RunAsAdmin\command.

Я понимаю, что могу удерживать нажатой клавишу Shift и правую кнопку мыши, чтобы использовать интерфейс оболочки для запуска от имени другого пользователя, однако использование runasиз командной строки дает возможность использовать дополнительные параметры и переключатели параметров, такие как \noprofileи \savecred.

Начальная попытка

используя runas напрямую, без экранирования

Вот что я пытался изначально использовать runas напрямую :

runas /noprofile /user:Administrator "\"%SystemRoot%\System32\msiexec.exe\" /i \"%1\" %*"

сначала используя cmd, без экранирования

В целях отладки я отправил команду сначала в cmd (с возможностью не закрывать окно), а затем в runas

cmd /k "runas /noprofile /user:Administrator "\"%SystemRoot%\System32\msiexec.exe\" /i \"%1\" %*""

используя runas напрямую или сначала cmd, без экранирования

Результат показывает, что переменная окружения интерпретируется неправильно. По какой-то причине %sзаменяется1

Attempting to start "1ystemRoot\System32\msiexec.exe" /i "D:\Downloads\somePackage.msi"  as user "Administrator" ...
RUNAS ERROR: Unable to run - "1ystemRoot\System32\msiexec.exe" /i "D:\Downloads\somePackage.msi"
2: The system cannot find the file specified.

используя runas напрямую или сначала cmd, с обратной косой чертой

С моей первой попыткой экранирования переменной я получаю тот же результат, 1ystemRootесли экранирую знак процента с обратной косой чертой \вокруг переменной среды (например \%SystemRoot\%) как для первой отправки в cmd, так и для прямой отправки в runas .

Я также попытался поместить кавычки \"вокруг переменной окружения (например \"%SystemRoot\"%), и это тоже не сработало.

Временное решение

сначала используя cmd, экранированный с процентами

Я обнаружил, что после отправки в cmd сначала работает, а затем runas

cmd /k "runas /noprofile /user:Administrator "\"%%SystemRoot%%\System32\msiexec.exe\" /i \"%1\" %*""

Attempting to start "C:\Windows\System32\msiexec.exe" /i "D:\Downloads\somePackage.msi" as user "Administrator" ...

И это сработало

используя runas напрямую, сбежал с процентами

Однако когда я использую тот же синтаксис непосредственно с runas , он не интерпретирует и не заменяет переменную окружения на ее значение, что мне кажется очень странным.

runas /noprofile /user:Administrator "\"%%SystemRoot%%\System32\msiexec.exe\" /i \"%1\" %*"

Этот результат показывает, что runas не заменяют переменную среды, как показано ниже, прежде чем окно командной строки быстро закрывается.

Attempting to start "%SystemRoot%\System32\msiexec.exe" /i "D:\Downloads\somePackage.msi" as user "Administrator" ...

Правильный синтаксис runas?

используя runas напрямую, правильный синтаксис?

Существует ли правильный способ экранирования или вызова переменных среды для runas напрямую при использовании команд реестра контекстного меню, вызываемых правой кнопкой мыши?

(Похоже, это как-то связано с тем, что проводник отправляет команды / параметры по-разному или как-то иначе интерпретирует команды / параметры.)

Или мне нужно сначала отправить в cmd, а затем runas, чтобы заполнить переменные среды, как я делал для целей отладки?

Рекомендации

  1. Использование обратной косой черты для экранирования символов в cmd.exe - Super User
  2. Руна не допускает сложных аргументов? - Переполнение стека
  3. Цитаты, символы Escape, разделители - Windows CMD - SS64
  4. Пакетные файлы - Побег Персонажи - Страницы сценариев Роба ван дер Вуде

Попробуйте заменить %SystemRoot%\System32\msiexec.exeна так же, msiexecкак %SystemRoot%\System32;уже будет в вашем системном пути.
DavidPostill

Ответы:


1

Если вы хотите использовать переменные среды внутри раздела реестра, не используя их cmdдля расширения, вам нужно будет использовать тип раздела реестра REG_EXPAND_SZ, а не значение по умолчанию REG_SZ для значения реестра "(по умолчанию)".

Но редактор реестра не позволяет вам изменить тип значения реестра «(по умолчанию)», поэтому вам нужно будет использовать что-то вроде

reg add HKEY_CURRENT_USER\Software\Classes\Msi.Package\shell\RunAsAdmin\command /f /ve /t REG_EXPAND_SZ 

сначала создайте раздел реестра, а затем установите значение, которое вам нужно, и увеличьте переменные среды.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.