Ответ 1
Фактически вы не создаете файл манифеста в VB. Явление приложения Windows представляет собой стандартный текстовый документ, отформатированный как XML. Вы можете создать его в "Блокноте" и сохранить его с соответствующим именем файла в каталоге приложения (YourAppName.exe.manifest
).
В Microsoft имеется более подробная информация: Манифест приложений. Он даже содержит пример манифеста, который можно просто скопировать и вставить в пустой текстовый файл для начала.
Важно, если вы хотите, чтобы ваше приложение запрашивало у пользователя возвышение, нужно установить requestedExecutionLevel
в requireAdministrator
, а не asInvoker
. Конкретная информация об использовании манифестаций с UAC доступна здесь.
Таким образом, полный образец может выглядеть примерно так:
<?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="*"
name="MyMagicalApplication"
type="win32"
/>
<description>Sample manifest for your super cool application</description>
<!-- Request version 6 of the common controls. -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Традиционный способ встраивания манифеста в исполняемый файл использует утилиту mt.exe
, доступную как часть SDK Windows.
сайт VBAccelerator также содержит некоторую информацию о вложениях манифеста в приложении VB 6. В частности, он говорит:
Существует два способа предоставить манифест: самый простой (но наименее элегантный) способ - предоставить манифест на диске для исполняемого файла. Скажем, ваше приложение называется TimeSlot.exe. Затем, если вы сохраните XML-манифест выше, как
TimeSlot.exe.manifest
в том же каталоге, что и исполняемый файл, TimeSlot.exe автоматически получит стили XP. Приведены примеры VB5 и VB6. Если вы переименуете файл .manifest перед запуском приложения, вы можете отключить стили XP.
Более надежный метод заключается в том, чтобы скомпилировать манифест в качестве ресурса в вашем приложении. Для этого манифест должен отображаться как тип ресурса
RT_MANIFEST
(24) с idCREATEPROCESS_MANIFEST_RESOURCE_ID
(1). По какой-то причудливой причине вы должны также гарантировать, что результирующий XML файл будет даже кратным 4 байтам. Так, например, если ваш файл на самом деле составляет 597 байт, вам нужно добавить пробельные поля, чтобы до размера файла до 600 байтов. Примеры ресурсов демонстрируют, как создать этот файл ресурсов, используя компилятор ресурсов script (.rc файл) и RC.exe.
Но если вы хотите встроить манифест автоматически при создании своего приложения из VB 6 IDE, вам придется немного потрудиться. VB 6 IDE не поддерживает шаги после сборки, поэтому вы не можете просто запустить mt.exe
в командной строке, чтобы сделать это за вас. Есть несколько утилит, которые я видел в Интернете, которые утверждают, что автоматически встраивают манифесты для вас, но я считаю, что большинство из них - это устаревшие утилиты, которые обрабатывают только запрос v6 ComCtl32.dll. Я не уверен, что они легко расширяемы, чтобы включить разрешения UAC, но это стоит того. Вот некоторые ссылки, чтобы проверить: