Манифест VB6 не работает в Windows 7

Я создал файл манифеста для приложения VB6, работающего в Windows 7 (не для каких-либо изменений визуального стиля, просто чтобы убедиться, что он обращается к общему реестру, а не к виртуализированному)

Имя исполняемого файла - Capadm40.exe, манифест называется Capadm40.exe.manifest и содержит следующее:

<?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="CompanyName.Capadm40"
     type="win32"/>
  <description>Administers the System</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

Однако, похоже, это не имеет никакого значения. т.е. приложение все еще использует виртуализированный куст реестра. Что еще странно, так это то, что после того, как я снял флажок с опции «Запускать эту программу от имени администратора» в свойствах приложения exe, окна по-прежнему показывают щит на значке приложения, что заставляет меня думать, что это некоторая проблема с моей установкой Windows, а чем ошибка с манифестом. Любые идеи?


person Matt Wilko    schedule 20.12.2010    source источник
comment
Если у него есть щит на exe, наверняка он запрашивает повышение при запуске? И в этом случае он не получит виртуализацию, по крайней мере, виртуализацию UAC. Прежде чем пытаться разобраться с проблемами манифеста, действительно ли вы уверены, что он пишет в виртуализированные местоположения улья?   -  person Kate Gregory    schedule 20.12.2010
comment
Он не запрашивает повышения и не должен (я думаю, что значок, показывающий щит, должен быть какой-то ошибкой Windows), потому что при запуске он использует виртуализированный реестр, потому что путь к данным отличается от того, когда я Щелкните правой кнопкой мыши и запустите от имени администратора. Проблема в том, что манифест, похоже, не действует (даже если я изменил уровень на requireAdministrator)   -  person Matt Wilko    schedule 20.12.2010
comment
Действительно ли манифест действителен? например это кодировка UTF-8?   -  person MarkJ    schedule 20.12.2010
comment
Да, это было то, что я проверил для начала, поскольку некоторые текстовые редакторы прозрачно меняли кодировку в фоновом режиме   -  person Matt Wilko    schedule 06.01.2011


Ответы (4)


Я бы воспользовался создателем манифеста LaVolpe, отлично работает для XP, Vista и 7: http://www.vbforums.com/showthread.php?t=606736

person Joe Jordan    schedule 21.12.2010
comment
Я пробовал использовать Make My Manifest ранее, но он вылетел, когда я открыл два своих проекта, поэтому я резко развернулся, но этот инструмент, похоже, работает хорошо. Спасибо - person Matt Wilko; 21.12.2010
comment
Еще одно примечание для всех, кто наткнется на это - почти 18 месяцев спустя; Я использовал этот создатель манифеста для многих проектов VB6, и он работал без сбоев. - person Matt Wilko; 03.05.2012

Вы, вероятно, столкнулись с кешем слияния (и кешем значков оболочки Explorer). В любом случае настоятельно не рекомендуется использовать внешние манифесты, но попытки добавить их после того, как программа уже была запущена, часто приводят к таким симптомам.

См. Манифест и слияние cache для краткого описания.

Вы также можете прикоснуться к EXE, чтобы перезагрузить кеш.

person Bob77    schedule 20.12.2010
comment
Кажется, это именно тот сценарий, который я видел - изменения во внешнем манифесте, казалось, не имели никакого значения, затем внезапно это сработало без видимой причины - теперь я знаю, почему! - person Matt Wilko; 21.12.2010

Я нашел только один манифест, который работает на всех платформах 9x +. или вообще работает. Я перепробовал все примеры, статьи и т. Д.

номер версии или что-то еще добавленное к нему убьет его. возможное исключение - это дополнительный параметр в requestExecutionLevel, который кажется нормальным. вы можете изменить уровень, и вы можете добавить uiAccess. это допустимо. после БОЛЬШОГО тестирования двоичного подсчета я обнаружил, что эти симпатичные дополнительные функции манифестов, которые предлагает Microsoft, просто заставляют окна выдавать различные ошибки.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
        <ms_asmv2:security>
            <ms_asmv2:requestedPrivileges>
                <ms_asmv2:requestedExecutionLevel level="asInvoker">
                </ms_asmv2:requestedExecutionLevel>
            </ms_asmv2:requestedPrivileges>
        </ms_asmv2:security>
    </ms_asmv2:trustInfo>
</assembly>
person Jim Michaels    schedule 03.05.2012

Применение стилей в VB6 IDE:

Сохраните этот текст в файле с именем vb6.exe.manifest в той же папке, что и vb6.exe:

<?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="Microsoft.VisualBasic.IDE"
    type="win32"
/>
<description>Visual Basic 6 IDE</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>   

Добавляйте пробелы в конец файла, пока он не достигнет 672 байтов (кратно 4).

Потом:

  1. скачайте Resource Hacker и откройте его от имени администратора
  2. Файл> откройте VB6.exe
  3. Файл> Новый пустой скрипт
  4. тип: 1 24 "vb6.exe.manifest"
  5. Скомпилировать скрипт
  6. Сохранять
person Bernardo Ramos    schedule 06.07.2016
comment
Да, это то, что я поставил в первую строчку. Это нужно для того, чтобы увидеть приложение с визуальным стилем во время его отладки, перед его компиляцией. - person Bernardo Ramos; 07.07.2016
comment
Это не то, что я спросил - person Matt Wilko; 07.07.2016