У меня есть файл .bat
который я использую для запуска некоторых программ. Некоторые из них требуют повышенных привилегий (например, проверка dev -device-существующие на основе devcon
), а некоторые - нет. Итак, я запускаю .bat
от имени администратора и использую команду runas
для запуска остальных.
runas /trustlevel:0x20000 "C:\Folder\foo.exe"
runas /trustlevel:0x20000 "C:\Folder\bar.exe"
Это работает для некоторых программ. Однако для некоторых это сообщение об ошибке (перевод с финского самостоятельно, может немного отличаться на английском языке):
ERROR: Can not execute - bar.exe
740: The requested operation requires elevation.
Странная часть, если я создам этот .bat
:
@echo off
start "" "bar.exe"
и запустить его с runas
, это работает как шарм. Их сочетание
runas /trustlevel:0x20000 "start \"\" \"C:\Folder\bar.exe\""
не будет работать, потому что start
не файл. Что вызвало бы это?
Обновление: я попробовал другую команду, и она работала.
runas /trustlevel:0x20000 "cmd /c start \"\" \"C:\Folder\bar.exe\""
Но я хочу знать не о том, как заставить это работать, а о том, почему это происходит.
Обновление 2: как предложено в комментариях and31415, это разница между foo.exe
и bar.exe
. Но должна быть разница между способами их запуска, поскольку их результаты различны; эта разница - то, что я ищу.
Обновление 3: я проверил манифесты программ с помощью редактора ресурсов, и вот они. Похоже, они имеют одинаковый уровень выполнения (как asInvoker
, который является самым низким уровнем пользователя).
Верхний - это bar.exe
а нижний - foo.exe
. (Я знаю, наоборот:D)
Обновление 4: Подтверждено, что также происходит с psexec
из командной строки с повышенными правами :
psexec -l -i bar.exe
получает ошибку,
psexec -l -i cmd /C start "" "bar.exe"
работает.