У меня есть файл .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"

работает.

0