Манифест и GetVersionEx - PullRequest
       33

Манифест и GetVersionEx

0 голосов
/ 12 июня 2018

В настоящее время я экспериментирую с добавлением файла example.manifest рядом с моей программой example.exe , поэтому GetVersionEx возвращает правильную информацию.

Однако - похоже,не сделал никакой разницы вообще - я все еще получаю только 6,2

Вот мой файл манифеста, который я намерен использовать для всех моих 32/64-битных исполняемых файлов Windows

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"
      />
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"
        />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
</assembly>

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

В дополнение к ответу @ Дэвида.

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

Project Options -> Application -> Runtime Themes - выберите Use custom manifest и найдитеВаш файл манифеста.

enter image description here

0 голосов
/ 13 июня 2018

В итоге я решил использовать инструмент ресурсов (например, Resource Tuner), чтобы добавить файл манифеста в файл .res.

  • Я отключил все элементы среды IDEдля тем, пользовательских манифестов, значков и т. д.
  • Я не включаю xpman в использование
  • Я включаю мой файл .res, содержащий манифест и значки, внутри основного блока .dpr

Это работает, поскольку обе темы и getversionex теперь возвращают правильные результаты.

...

Для автоматизации сборки - мой скрипт сборки, сгенерированный другим скриптом, извлекает правильный файл .res в зависимости от продукта/ редакция строится.

0 голосов
/ 12 июня 2018

Файл должен иметь имя example.exe.manifest, а не example.manifest.

Но даже тогда, IIRC, настройки supportedOS игнорируются для внешнего манифеста.Таким образом, вам придется вместо этого встраивать манифест в качестве ресурса.В любом случае это гораздо более надежный подход.

...