Как я могу определить, требует ли исполняемый файл UAC? До сих пор я пришел к двум идеям: распознавание значка исполняемого файла для проверки наличия на нем значка экрана UAC и информация из Википедии: http://en.wikipedia.org/wiki/User_Account_Control
можно программно определить, будет ли исполняемый файл требовать возвышения с помощью CreateProcess() и установки параметра dwCreationFlags в CREATE_SUSPENDED. Если требуется возвышение, то возвращается ERROR_ELEVATION_REQUIRED. [16] Если возвышение не требуется, будет возвращен код возврата успеха, с которого вы можете использовать TerminateProcess() для вновь созданного приостановленного процесса. Это не позволит вам обнаружить, что исполняемый файл требует повышения, если вы уже выполняете повышенный процесс.
Спасибо
Попробуйте использовать функцию CheckElevation, экспортированную kernel32.dll. Это полностью недокументированная функция, но вот то, что мне удалось перепроектировать:
ULONG CheckElevation(
__in PWSTR FileName,
__inout PULONG Flags, // Have a ULONG set to 0, and pass a pointer to it
__in_opt HANDLE TokenHandle, // Use NULL
__out_opt PULONG Output1, // On output, is 2 or less.
__out_opt PULONG Output2
);
Вам нужно будет провести некоторое экспериментирование, чтобы узнать, как правильно вызвать функцию. До сих пор мне удалось разобраться, что если Output1 не равен 0, требуется возвышение.
Почему вы хотите использовать распознавание изображений, если его можно проверить программно? Вы можете использовать P/invoke для вызова CreateProcess с нужными параметрами.
Лучший способ - проанализировать его формат PE, а затем узнать, требует ли его файл манифеста UAC.
Не знаю, как Кенни написал код, но он показывает возможность.