Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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) с id CREATEPROCESS_MANIFEST_RESOURCE_ID (1). По какой-то причудливой причине вы должны также гарантировать, что результирующий XML файл будет даже кратным 4 байтам. Так, например, если ваш файл на самом деле составляет 597 байт, вам нужно добавить пробельные поля, чтобы до размера файла до 600 байтов. Примеры ресурсов демонстрируют, как создать этот файл ресурсов, используя компилятор ресурсов script (.rc файл) и RC.exe.

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

Ответ 2

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

  • Сохраните файл манифеста, возможно, назовите его "my.manifest".
  • Убедитесь, что размер файла несколько раз, как уже упоминал Коди. Если необходимо, заполните его пробелами в конце.
    См. Также: Внедрение манифеста приложения в exe vB6
  • Создайте ресурс файл "my.rc" со следующим содержимым:

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

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

    #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
    

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

  • Используйте rc.exe для компиляции этого файла .rc в файл .res.
  • Добавьте полученный файл .res в проект VB6.

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

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