У нас есть неуправляемое приложение C ++, которое, как представляется, вызывает запрос UAC. Кажется, это происходит на Win7, а НЕ на Vista
К сожалению, UAC dlg является системной модальностью, поэтому я не могу подключить отладчик для проверки кода, в котором он находится, и запуск под msdev (мы используем 2008) выполняется в повышенном режиме.
Мы помещаем окно сообщения в начале нашей программы / winmain, но оно даже не заходит так далеко, так что, очевидно, это в коде запуска.
Что может вызвать уведомление UAC так рано и что я могу сделать, чтобы отследить причину?
EDIT
Очевидно, что манифест является здесь важной проблемой, но, похоже, он мне не помогает - или, возможно, я неправильно настраиваю файл манифеста.
Может ли кто-нибудь предоставить образец манифеста?
Кроме того, выясняет ли магия компоновщика / UAC, что программа «может» записывать в реестр и устанавливать свои требования к UAC на основании этого? Существуют пути кода, которые могут инициировать UAC, но мы даже не в тот момент, когда появляется UAC dlg.
Дополнительная странность заключается в том, что этого не происходит в Vista с включенным UAC.
Вот манифест (который, я думаю, был / был сгенерирован автоматически):
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
</assembly>
А затем этот был добавлен в список манифестов, чтобы посмотреть, поможет ли это
<?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"
processorArchitecture="x86"
name="[removed for anonymity]"
type="win32"
/>
<description>
[removed for anonymity]
</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Ниже приведены данные из самого EXE-файла, использующего инструмент ManifestViewer
- <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="[removed]" type="win32" />
<description>[removed]</description>
- <dependency>
- <dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
- <dependency>
- <dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
- <security>
- <requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Возможно, это связано с настройкой совместимости xp в нашем приложении. Я должен проверить это. (мы установили это в установщике, который я обнаружил, потому что некоторые звуковые драйверы не работают правильно на win7)