Проблема в том, что ваше приложение не содержит манифеста сборки с requiredExectutionLevel .
Фон
Все правильно написанные приложения Windows должны иметь манифест сборки. И начиная с 2006 года одним из элементов, которые вам необходимы, является requiredExecutionLevel , который указывает, может ли ваше приложение функционировать, только если пользователь является администратором.
Если ваше приложение не имеет манифеста сборки, или если оно не имеет requiredExecutionLevel Windows будет считать, что это устаревшее приложение, и будет делать все возможное, чтобы поддерживать его работу .
Одна вещь совместимости для унаследованных приложений заключается в том, что некоторые из них могут быть установщиком или udpater и могут функционировать только при запуске от имени администратора. Windows пытается угадать эти приложения по именам файлов:
- установка
- обновление
- 1024 * патч *
Все примеры имен файлов, обнаруживаемых эвристиками совместимости, которые пытаются автоматически повысить для пользователя.
Если приложение не имеет манифеста сборки, значит, оно не является правильно написанным приложением Windows.
Правильное решение
Правильное решение - добавить манифест сборки, который будет у всех правильных приложений. Это отключило эвристику.
Пример манифеста UAC "asInvoker":
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>