[VB6] Подключение манифеста к приложению Visual Basic 6

Тема в разделе "Изучение основ языка", создана пользователем Dragokas, 27 июн 2015.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    Также у тебя идет запрос UAC при выполнении каждой из операций.
    Достаточно получить один раз привилегии на этапе запуска приложения.
    Для этого нужно подключить к приложению манифест с затребованием уровня прав HighestAvailable (если нужно , чтобы программа могла запустится даже под учетной записью, состоящей в группе "Ограниченный пользователь") или уровнем RequireAdministrator (чтобы можно было запустить только пользователю, обладающему правами не ниже группы "Администраторы").

    Ты можешь сделать это 2 способами:
    1) пропатчить готовый EXE-файл. Сделать это весьма просто с помощью программы ManifestByTheTrick.
    2) включить файл манифеста в ресурсы приложения в самом проекте.
    Для этого нажимаешь "Tools" -> Resource Editor, предпоследня иконка "Add custom resource", выбираешь файл манифеста.
    Двойной клик по ресурсу в появившемся дереве.
    Указываешь: тип: #24, ID: 1. Язык - не важно.
    res.jpg
    ------------------------------------------
    Внимание !!!
    1. Файл манифеста должен быть составлен в кодировке ANSI, или более правильно - в кодировке UTF-8.
    2. Файл должен быть выровнен по 4-байтовой границе. Это означает, что размер файла (в байтах) должен быть кратен 4 (делится нацело). Для этого можно просто добавить недостающее кол-во пробелов в конец файла.
    -------------------------------------------
    Образцы файлов манифеста можно посмотреть в этой теме и в папке исходниках программы из п.1.
    Второй способ имеет преимущества, т.к. не нужно после каждой сборки заново пропатчивать файл.

    вынесено из темы: Windows Error Detect (сбор данных для анализа причин сбоев)
     
    SNS-amigo нравится это.
  2. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.197
    Симпатии:
    4.969
    Подключил методом 2 манифест Manifest_highestAvailable - прав нету... что то не так делаю?
     
  3. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.381
    Симпатии:
    5.265
    лучше бы сам файл показал.
     
  4. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.197
    Симпатии:
    4.969
    манифеста?
    Код (XML):
    <?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="Alex Dragokas"
           type="win32">
        </assemblyIdentity>
        <description>Alex Dragokas</description>
        <dependency>
            <dependentAssembly>
                <assemblyIdentity
                   type="win32"
                   name="Microsoft.Windows.Common-Controls"
                   version="6.0.0.0"
                   processorArchitecture="X86"
                   publicKeyToken="6595b64144ccf1df"
                   language="*"
                />
            </dependentAssembly>
        </dependency>

        <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
            <security>
                <requestedPrivileges>
                    <requestedExecutionLevel
                       level="highestAvailable"
                       uiAccess="false">
                    </requestedExecutionLevel>
                </requestedPrivileges>
            </security>
        </trustInfo>
        <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
            <application>
                <!-- 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}"/>
                <!-- Windows 8.1 -->
                <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
                <!-- Windows 10 -->
                <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            </application>
        </compatibility>
        <application xmlns="urn:schemas-microsoft-com:asm.v3">
            <windowsSettings>
                <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
            </windowsSettings>
        </application>
    </assembly>
     
    Последнее редактирование модератором: 28 июн 2015
  5. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.381
    Симпатии:
    5.265
    нет, сам .exe а манифест я сам оттуда вытащу.
     
  6. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.197
    Симпатии:
    4.969
    емае)))
    когда скомпиллируешь тогда работает!


    а с проекта нет.

    ок,тогда перехожу к остальному.
     
  7. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    Koza Nozdri, с проекта и не будет. Если хочешь отлаживать с теми же правами, просто запусти VB редактор "От имени Администратора".
    У меня обычно ярлычок выведен на панель задач уже с этой галкой, когда мне нужно от Админа,
    а когда не нужно, то просто запускаю файл проекта.
    --- Объединённое сообщение, 28 июн 2015, Дата первоначального сообщения: 28 июн 2015 ---
    Значит, если успешно добавил манифест, теперь можешь и визуальные стили включить (иначе в таком виде, как сейчас, у тебя прога в Win XP будет крешится).
    Добавляй на этап инициализации такой код:

    Код (vb.net):
    Private Type tagINITCOMMONCONTROLSEX
        dwSize  As Long
        dwICC   As Long
    End Type

    Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (lpInitCtrls As tagINITCOMMONCONTROLSEX) As Boolean

    Private Sub Form_Initialize()
        Dim ICC As tagINITCOMMONCONTROLSEX

        ' Enable visual styles
        With ICC
            .dwSize = Len(ICC)
            .dwICC = &HFF& 'http://www.geoffchappell.com/studies/windows/shell/comctl32/api/commctrl/initcommoncontrolsex.htm
        End With
        InitCommonControlsEx ICC
    End Sub
     
    Kиpилл нравится это.
  8. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.381
    Симпатии:
    5.265
    и остальные секции манифеста также надо поправить под себя.
    А по стилям, имхо, можно просто убрать этот блок с dpiAware и не заморачиваться, если нет каких-либо причин почему он нужен.
    --- Объединённое сообщение, 28 июн 2015, Дата первоначального сообщения: 28 июн 2015 ---
    Кстати, тут не упомянули ещё третий вариант подключения манифеста. Можно положить манифест рядом с файлом назвав его типа filename.manifest
     
  9. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.197
    Симпатии:
    4.969
    Тоже читал,но решил по второму варианту попробовать.
    Кстати неплохо бы это все описать где нибудь.
    Я многое переделал,как запишу скину сюда - если вдруг найдутся желающие проверить на хр и вин*64 )
     
  10. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    Можно, но там нужно в проекте MS Visual Studio указывать ссылку на этот файл. А как это делать в IDE VB6 я не знаю.
    Все принципы и способы составления описаны в теме Зачем Win32-приложению манифест?
    .
     
  11. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.197
    Симпатии:
    4.969
    Я вспоминал все - где читал)
     
  12. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    Koza Nozdri, кстати, у меня в примере манифеста нарушено такое правило:
    Код (Text):

    name="CompanyName.ProductName.YourApplication"
     
    т.е. там не должно быть пробелов (где-то читал спецификацю, по-моему, на MSDN).
    Оно и без этого нормально работает, но все таки лучше заменить пробелы на точки.

    И еще
    Код (Text):

       <application xmlns="urn:schemas-microsoft-com:asm.v3">
           <windowsSettings>
               <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
           </windowsSettings>
       </application>
     
    Вот эту секцию лучше убрать. Если не ошибаюсь, она запрещает автоматическое масштабирование
    формы на другом разрешении экрана. Но как то не всегда помогает. Имхо, лучше не указывать.
     
    Kиpилл нравится это.

Поделиться этой страницей