Como chamar variáveis de ambiente no comando runas para o menu de contexto do botão direito

1

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

  1. Usando a barra invertida para escapar de caracteres em cmd.exe - Super User
  2. o runas não permite argumentos complexos? - estouro de pilha
  3. Citações, caracteres de escape, Delimitadores - Windows CMD - SS64
  4. Arquivos em lote - Personagens em fuga - Páginas de Scripts de Rob van der Woude
por ClearBlueSky85 26.04.2015 / 22:21

1 resposta

1

Se você quiser usar variáveis de ambiente dentro de uma chave do registro sem precisar usar cmd para expandi-las, será necessário usar um tipo de chave de registro REG_EXPAND_SZ, não o valor padrão do registro REG_SZ do valor "(Padrão)".

Mas o editor de registro não permite que você altere o tipo de valor de registro "(Padrão)", portanto, você precisará usar algo como

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

primeiro crie a chave de registro e defina o valor para o que você precisa e obtenha as variáveis de ambiente expandidas.

    
por 28.04.2015 / 11:04