Estou tendo problemas com o uso de variáveis de ambiente com o uso de runas
ao usar o comando no registro para um comando de menu de contexto do botão direito do mouse. Eu tentei métodos diferentes de escapar a variável, no entanto runas
tem alguma sintaxe diferente que não é explicada claramente.
Estou usando um comando personalizado no registro para um item de menu de contexto do botão direito do mouse. Por exemplo, estou tentando criar um novo comando de clique direito, por exemplo, %código%.
Eu percebo que posso manter pressionada a tecla Shift e a direita para usar a interface do shell para ser executada como um usuário diferente. No entanto, usar HKEY_USERS\<some user account>\Software\Classes\Msi.Package\shell\RunAsAdmin\command
na linha de comando oferece a possibilidade de usar opções adicionais e parâmetros como runas
e \noprofile
.
Tentativa inicial
usando runas diretamente, sem escape
Aqui está o que eu tentei usar inicialmente runas diretamente :
\savecred
usando o cmd primeiro, sem escape
Para fins de depuração, enviei o comando primeiro para cmd (com a opção de não fechar a janela) e, em seguida, para runas
runas /noprofile /user:Administrator "\"%SystemRoot%\System32\msiexec.exe\" /i \"%1\" %*"
usando runas diretamente ou cmd primeiro, sem escape
O resultado mostra que a variável ambiental não está sendo interpretada corretamente. Por algum motivo, o cmd /k "runas /noprofile /user:Administrator "\"%SystemRoot%\System32\msiexec.exe\" /i \"%1\" %*""
está sendo substituído por um %s
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.
usando runas diretamente ou cmd primeiro, com escape de barra invertida
Com minha primeira tentativa de escapar da variável, recebo o mesmo resultado 1
se eu escapar dos sinais de porcentagem com uma barra invertida 1ystemRoot
ao redor da variável de ambiente (por exemplo, \
) para enviar para cmd primeiro ou enviando para runas diretamente .
Eu também tentei colocar aspas \%SystemRoot\%
na variável de ambiente (por exemplo, \"
) e isso também não funcionou.
Solução alternativa
usando cmd primeiro, com escape por cento
Descobri que o seguinte funciona depois de enviar cmd primeiro e, em seguida, runas
\"%SystemRoot\"%
cmd /k "runas /noprofile /user:Administrator "\"%%SystemRoot%%\System32\msiexec.exe\" /i \"%1\" %*""
E funcionou
usando runas diretamente, com escape por cento
No entanto, quando eu uso a mesma sintaxe com runas diretamente , ela não interpreta ou substitui a variável ambiental com seu valor, o que me parece muito estranho.
Attempting to start "C:\Windows\System32\msiexec.exe" /i "D:\Downloads\somePackage.msi" as user "Administrator" ...
Este resultado mostra runas não substituindo a variável de ambiente como mostrado abaixo antes que a janela do prompt de comando seja fechada rapidamente
runas /noprofile /user:Administrator "\"%%SystemRoot%%\System32\msiexec.exe\" /i \"%1\" %*"
Correta a sintaxe das runas?
usando runas diretamente, sintaxe correta?
Existe uma maneira correta de escapar ou chamar variáveis de ambiente para runas diretamente ao usar os comandos de registro do menu de contexto do botão direito?
(Parece que tem algo a ver com o explorador enviando comandos / parâmetros de forma diferente ou runas interpretando comandos / parâmetros de maneira diferente.)
Ou eu tenho que enviar para cmd primeiro e runas para obter as variáveis de ambiente para preencher, como fiz para fins de depuração ?
Referências
- Usando a barra invertida para escapar de caracteres em cmd.exe - Super User
- o runas não permite argumentos complexos? - estouro de pilha
- Citações, caracteres de escape, Delimitadores - Windows CMD - SS64
- Arquivos em lote - Personagens em fuga - Páginas de Scripts de Rob van der Woude