Как отключить запрос контроля учетных записей для конкретного приложения

У меня есть утилита командной строки для некоторых целей. Я запускаю эту утилиту из библиотеки DLL COM с помощью функции ShellExecuteEx. При вызове ShellExecuteEx я указываю параметр lpVerb как «runas», так что утилита запускается с повышенными правами. Я вызываю функцию com-интерфейса из exe-клиента при его запуске. Поэтому, когда я запускаю клиент exe, утилита также запускается. Моя проблема заключается в том, что, поскольку утилита запущена с повышенными правами, она всегда запрашивает запрос подтверждения контроля учетных записей. Я не могу этого вынести, потому что во время этого процесса не будет никакого ручного вмешательства.Таким образом, мне нужно, чтобы утилита была запущена без показа приглашения UAC, но все еще повышена, когда я запускаю клиент exe. Есть ли способ достичь этого? Я бы предпочел некоторые изменения, сделанные в самой утилите, такие как изменение файла манифеста, а не некоторые изменения системных параметров. Любая помощь будет оценена по достоинству.

1 ответ

  1. Это невозможно так, как вы описываете (манифестное изменение), потому что это будет противоречить цели UAC.

    Однако можно использовать запланированную задачу. Таким образом, повышение прав при взаимодействии с пользователем требуется только один раз (при создании задачи).

    Взгляните на ответ, который я дал здесь: https://stackoverflow.com/a/36838171/1871033

    Вы можете сделать то же самое, но без триггера входа в систему. Таким образом, у вас будет запланированная задача, которая не выполняется сама по себе, но она существует. Затем можно использовать schtasks.exe /run /tn YourTaskNameбез повышения прав для выполнения задачи с повышенными привилегиями.