Можно ли добавить ресурс манифеста в проект VB6 с помощью редактора ресурсов? - PullRequest
4 голосов
/ 02 июля 2010

У нас есть проект VB6, который компилируется в EXE-файл ActiveX, в названии которого есть слово «patch» (это часть полицейской диспетчерской системы), что вызывает Обнаружение установщика в Windows7, чтобы думать, что требуется повышение прав.

Вместо того, чтобы переименовывать EXE, я хочу встроить ресурс манифеста в скомпилированный EXE, который будет запрашивать уровень привилегий asInvoker.Из чтения я знаю, что могу сделать это после компиляции EXE с помощью инструмента mt в Windows SDK, но я бы предпочел поместить манифест в файл .RES, чтобы он компилировался в программу всякий раз, когда я собираюproject.

Есть ли способ добавить ресурс манифеста (тип ресурса 24) в проект VB6 с помощью надстройки редактора ресурсов?Я добавил файл манифеста в качестве пользовательского ресурса и попробовал несколько различных значений для типа ресурса, таких как «RT_MANIFEST» и «24», а затем проверил, работает ли он, с помощью mt для повторного извлечения манифеста, ноЯ не могу заставить его работать.

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

1 Ответ

4 голосов
/ 02 июля 2010

Сначала я подумал, что попробую использовать rc для создания .RES файла, который я мог бы просто добавить в свой проект. Я никогда не использовал rc раньше, поэтому я оказался на этой странице MSDN , пытаясь выяснить это.

Что было интересно, так это описание для typeNameId на этой странице (выделение добавлено):

Введите имя или идентификатор для ресурс. Укажите имя строки или число. Если используется число, добавьте строка с "#", чтобы указать, что это представляет число . Каждый тип ресурса элемент должен иметь только один typeNameId атрибут.

Я подумал: «Ну, это интересно и, вероятно, не подойдет для редактора ресурсов VB6, но я все равно попробую».

И вот, если вы добавите файл манифеста в качестве пользовательского ресурса, а затем измените его тип на #24 (то есть используйте префикс #), он работает! Он корректно внедряется как ресурс манифеста в скомпилированный EXE.

Вот подробные шаги:

1) Создайте файл манифеста. Я использовал этот (обратите внимание, что заполнение в конце сделало файл ровно 608 байт в моем случае):

<?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" name="DispatchMonitor" type="win32"/>
    <description>DispatchMonitor RunAsInvoker fix</description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly> 
<!-- Padding to make filesize even multiple of 4 -->

2) Откройте редактор ресурсов в среде IDE VB6, выбрав Редактор ресурсов в меню Инструменты (может потребоваться сначала включить его в Надстройки > Менеджер надстроек ).

3) При необходимости создайте новый файл ресурсов.

4) Добавьте новый пользовательский ресурс (нажмите кнопку слева от значка «?»).

5) Появится диалоговое окно выбора файла: выберите файл манифеста, созданный на шаге 1.

6) Ресурс будет добавлен в папку «CUSTOM» с идентификатором 101 по умолчанию.

7) Дважды щелкните новый ресурс. Измените «Тип» на #24, а «Идентификатор» на 1.

8) Сохраните изменения и закройте редактор ресурсов .

...