У меня возникли проблемы с использованием переменных среды с использованием runas
при использовании команды в реестре для команды контекстного меню правой кнопкой мыши. Я пробовал разные способы экранирования переменной, однако у runas
есть какой-то другой синтаксис, который четко не объясняется.
Я использую пользовательскую команду в реестре для пункта контекстного меню, вызываемого правой кнопкой мыши. Например, я пытаюсь создать новую команду щелчка правой кнопкой мыши, например, HKEY_USERS\<some user account>\Software\Classes\Msi.Package\shell\RunAsAdmin\command
.
Я понимаю, что могу удерживать нажатой клавишу shift и щелчок правой кнопкой мыши, чтобы использовать интерфейс оболочки для запуска от имени другого пользователя, однако использование runas
из командной строки дает возможность использовать дополнительные параметры и переключатели параметров, такие как \noprofile
и \savecred
.
Начальная попытка
используя Руны напрямую, без экранирования
Вот что я пытался изначально использовать 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, чтобы заполнить переменные окружения, как я делал для целей отладки?