runas
我在使用注册表中的命令作为右键单击上下文菜单命令时,无法使用环境变量。我尝试了不同的方法来转义变量,但runas
有一些不同的语法没有得到清楚的解释。
我正在使用注册表中的自定义命令来执行右键单击上下文菜单项。例如,我正在尝试创建一个新的右键单击命令,例如HKEY_USERS\<some user account>\Software\Classes\Msi.Package\shell\RunAsAdmin\command
。
我意识到我可以按住 shift 并右键单击以使用 shell 界面以其他用户身份运行,但是runas
从命令行使用可以使用附加选项和参数开关,例如\noprofile
和\savecred
。
初次尝试
直接使用 runas,无需转义
这是我最初尝试使用鲁纳斯 直接地:
runas /noprofile /user:Administrator "\"%SystemRoot%\System32\msiexec.exe\" /i \"%1\" %*"
首先使用 cmd,未转义
为了调试目的,我发送了命令第一的到命令(可选择不关闭窗口),然后鲁纳斯
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\%
命令 第一的或发送至鲁纳斯 直接地。
\"
我也尝试在环境变量周围加上引号(例如\"%SystemRoot\"%
),但那也不起作用。
解决方法
首先使用 cmd,用百分号转义
我发现发送到后以下内容有效命令 第一的进而鲁纳斯
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 /noprofile /user:Administrator "\"%%SystemRoot%%\System32\msiexec.exe\" /i \"%1\" %*"
这一结果表明鲁纳斯在命令提示符窗口快速关闭之前不替换环境变量(如下所示)
Attempting to start "%SystemRoot%\System32\msiexec.exe" /i "D:\Downloads\somePackage.msi" as user "Administrator" ...
正确的 runas 语法?
直接使用 runas,语法正确吗?
是否有正确的方法来逃避或调用环境变量鲁纳斯 直接地当使用右键单击上下文菜单注册表命令时?
(这似乎与资源管理器以不同方式发送命令/参数或 Runas 以不同方式解释命令/参数有关。)
或者我必须发送至命令 第一的进而鲁纳斯获取环境变量以进行填充,就像我为了调试目的所做的那样?
参考
答案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
首先创建注册表项,然后将值设置为您需要的值并扩展环境变量。