VB6 Manifest не работает на Windows 7 - PullRequest
4 голосов
/ 20 декабря 2010

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

Exeимя 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 по-прежнему показывает щит на значке приложения, что заставляет меня думать, что это скорее проблема с моей установкой Windows.чем ошибка с манифестом.Есть идеи?

Ответы [ 4 ]

2 голосов
/ 21 декабря 2010

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

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

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

1 голос
/ 21 декабря 2010

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

0 голосов
/ 06 июля 2016

Применение стилей в 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. Сохранить
0 голосов
/ 03 мая 2012

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

номер версии или что-либо еще, добавленное к нему, убьет его. Возможное исключение - это дополнительный параметр requiredExecutionLevel, который выглядит нормально. Вы можете изменить уровень, и вы можете добавить uiAccess. те допустимы. после МНОГО тестирования двоичного кода я обнаружил, что те милые дополнительные возможности манифестов, которые предлагает Microsoft, просто заставляют Windows выдавать различные ошибки.

<?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>
...