Как правило, ресурсы содержат манифест, а часть манифеста указывает, нужна ли программе доступ администратора. Поскольку это утилита настройки, у нее, вероятно, есть манифест, требующий доступа администратора, и ваши тесты подхватили его, когда он попытался поделиться файлом ресурсов.
(Другие люди говорят об эвристике, используемой для определения того, нужна ли программе доступ администратора, если она не имеет манифеста. Например, если у вас есть старая программа, которая была сделана до того, как файлы манифеста были распространены, ОС может попытаться угадать, является ли это установщиком, ища определенные фразы типа «setup» в имени файла. Я считаю, что есть и другие эвристики. Это взлом для старых программ, которые были написаны до того, как манифесты позволили явно объявить ваш необходимо для доступа администратора.)
Вы можете исправить свою проблему, предоставив свой собственный манифест. Самый простой способ - использовать опцию компоновщика /MANIFESTUAC
.
Если вы используете старую инструментальную цепочку, вам, вероятно, придется самому сделать файл манифеста и включить его в свои ресурсы.
манифест - это кусок XML. Важный бит для вас будет выглядеть примерно так:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="yourprogram.exe" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Чтобы внедрить это в ваших ресурсах, ваш файл .RC должен иметь:
1 RT_MANIFEST <filename>
Если SDK настолько стар, что RT_MANIFEST
не определен , вы можете это определить самостоятельно:
#define RT_MANIFEST 24
Непонятная причина не сообщать нам, что содержит файл .rc. Но да, имея в нем манифест, который использует 'requireAdminstrator', является обычным способом запросить повышение UAC. –
относительно ответа, это плохая часть: VALUE "FileDescription", "Модуль установки" VALUE "InternalName", "SETUP" VALUE "OriginalFilename", "setup.exe" VALUE "ProductName", «Модуль установки " нет такой вещи, как манифест, определенный здесь :) – TheTrowser