Eu tenho um arquivo .bat
que uso para iniciar alguns programas. Alguns deles requerem privilégios elevados (por exemplo, um cheque devcon
-based-device-exist), mas outros não. Portanto, executo o .bat
como administrador e uso o comando runas
para executar os outros.
runas /trustlevel:0x20000 "C:\Folder\foo.exe"
runas /trustlevel:0x20000 "C:\Folder\bar.exe"
Isso funciona para alguns programas. No entanto, para alguns, esta mensagem de erro (traduzida do finlandês por si mesma, pode ser ligeiramente diferente em inglês):
ERROR: Can not execute - bar.exe
740: The requested operation requires elevation.
A parte estranha é, se eu criar este .bat
:
@echo off
start "" "bar.exe"
e executá-lo com runas
, funciona como um encanto. Sua combinação
runas /trustlevel:0x20000 "start \"\" \"C:\Folder\bar.exe\""
não funciona, porque start
não é um arquivo. O que causaria isso?
Atualização: Eu tentei outro comando e funcionou.
runas /trustlevel:0x20000 "cmd /c start \"\" \"C:\Folder\bar.exe\""
Mas , o que eu quero saber é não como fazer funcionar mas por que isso acontece .
Atualização 2: Conforme sugerido nos comentários de and31415 essa é uma diferença entre foo.exe
e bar.exe
. Mas deve haver uma diferença entre as formas de executá-las, pois os resultados são diferentes; essa diferença é o que eu estou procurando.
Atualização 3: Eu verifiquei os manifestos dos programas usando o Editor de recursos e aqui estão eles. Parece que eles têm o mesmo nível de execução ( asInvoker
, que é o nível de usuário mais baixo).
Osuperiorébar.exe
eoinferioréfoo.exe
.(Eusei,ocaminhoerrado:D)
Atualização4:Confirmadoparatambémocorrercompsexec
dopromptdecomandoelevado:
psexec-l-ibar.exe
recebeumerro,
psexec-l-icmd/Cstart"" "bar.exe"
funciona.