Как создать файл манифеста в Visual Basic 6.0?

Я хочу создать файл манифеста в VB 6.0. Когда я запускаю свое приложение, ОС должна запросить у пользователя права администратора. Я также хочу знать, как он может быть встроен в приложение?

2 ответов


вы фактически не создаете файл манифеста в VB. Манифест приложения Windows-это стандартный текстовый документ в формате XML. Вы можете создать его в блокноте и сохранить с соответствующим именем файла в каталоге вашего приложения (YourAppName.exe.manifest).

Microsoft имеет более подробную информацию здесь:Манифесты Приложений. Он даже включает в себя образец манифеста, который можно просто скопировать и вставить в пустой текстовый файл для начала работы.

в важно, если вы хотите, чтобы ваше приложение запрашивало пользователя для повышения, установить requestedExecutionLevel to 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 утилиты, доступен как часть Windows пакет SDK.

на сайт VBAccelerator также имеет некоторую информацию о манифестах внедрения в приложении VB 6. В частности, в нем говорится:

существует два способа предоставления манифеста: самый простой (но наименее элегантный) способ-предоставить манифест на диске для исполняемого файла. Предположим, ваше приложение называется TimeSlot.исполняемый. Затем, если вы сохраните XML манифеста выше как

TimeSlot.exe.manifest

в том же каталоге, что и исполняемый, таймслот.exe автоматически получит стили XP. Приводятся примеры VB5 и VB6. Если вы переименуете .файл манифеста перед запуском приложения можно отключить стили XP.

более надежным методом является компиляция манифеста в качестве ресурса в приложении. Для этого манифест должен отображаться как тип ресурса RT_MANIFEST (24) с id CREATEPROCESS_MANIFEST_RESOURCE_ID (1). По какой-то странной причине, ты должны также убедитесь, что результирующий XML-файл является четным кратным 4 байтам длинный. Так, например, если ваш файл на самом деле 597 байт, вам нужно добавить пробелы для заполнения, чтобы составить размер файла до 600 байт перед компиляцией. В примерах ресурсов показано, как создать этот файл ресурсов с помощью скрипта компилятора ресурсов (.rc-файл) и RC.исполняемый.

но если вы хотите внедрить манифест автоматически когда вы создаете свое приложение из VB 6 IDE, у вас будет немного больше трудностей. IDE VB 6 не поддерживает пост-сборку шаги, так что вы не можете просто запустить mt.exe в командной строке, чтобы сделать это для вас. Там are несколько утилит, которые я видел в интернете, которые утверждают, что автоматически вставляют манифесты для вас, но я считаю, что большинство из них-старые утилиты, которые обрабатывают только запрос v6 ComCtl32.файл DLL. Я не уверен, что они легко расширяемы для включения разрешений UAC, но это стоит попробовать. Вот некоторые ссылки для проверки out:


вот способ включить манифест во время сборки вашего приложения VB6:

  1. сохраните файл манифеста, возможно, назовите его "мой".проявляться."
  2. убедитесь, что размер файла кратен четырем, как уже упоминал Коди. Если необходимо, заполните его пробелами в конце.
    Читайте также: встраивание манифеста приложения в VB6 exe
  3. создать файл ресурсов " my.rc " со следующим содержанием:

    #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
    #define RT_MANIFEST 24
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "my.manifest"
    

    вы можно найти дополнительную информацию о константах, используемых в блоги msdn. Кажется, вам нужно использовать

    #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
    

    для проекта dll.

  4. использовать rc.exe для компиляции .rc-файл в a .файл res.
  5. добавить результат .Res-файл в ваш проект в VB6.

Я использую это в течение последних нескольких месяцев без проблем, на двух старых старых приложений, которые необходимо запустить на Windows 7. Возможно, вам придется поэкспериментировать с экономией ваш файл манифеста, хотя, для меня только сохранение его как UTF8 без BOM работал правильно.

чтобы проверить, что именно внедряется как манифест таким образом, вы также можете использовать mt.exe чтобы извлечь манифест из скомпилированной exe / dll. Именно это помогло мне найти проблему BOM ...