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

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
8,016
Решения
12
Реакции
6,785
Также у тебя идет запрос UAC при выполнении каждой из операций.
Достаточно получить один раз привилегии на этапе запуска приложения.
Для этого нужно подключить к приложению манифест с затребованием уровня прав HighestAvailable (если нужно , чтобы программа могла запустится даже под учетной записью, состоящей в группе "Ограниченный пользователь") или уровнем RequireAdministrator (чтобы можно было запустить только пользователю, обладающему правами не ниже группы "Администраторы").

Ты можешь сделать это 2 способами:
1) пропатчить готовый EXE-файл. Сделать это весьма просто с помощью программы ManifestByTheTrick.
2) включить файл манифеста в ресурсы приложения в самом проекте.
Для этого нажимаешь "Tools" -> Resource Editor, предпоследня иконка "Add custom resource", выбираешь файл манифеста.
Двойной клик по ресурсу в появившемся дереве.
Указываешь: тип: #24, ID: 1. Язык - не важно.
res.webp

------------------------------------------
Внимание !!!
1. Файл манифеста должен быть составлен в кодировке ANSI, или более правильно - в кодировке UTF-8.
2. Файл должен быть выровнен по 4-байтовой границе. Это означает, что размер файла (в байтах) должен быть кратен 4 (делится нацело). Для этого можно просто добавить недостающее кол-во пробелов в конец файла.
-------------------------------------------
Образцы файлов манифеста можно посмотреть в этой теме и в папке исходниках программы из п.1.
Второй способ имеет преимущества, т.к. не нужно после каждой сборки заново пропатчивать файл.

вынесено из темы: Windows Error Detect (сбор данных для анализа причин сбоев)
 
) включить файл манифеста в ресурсы приложения в самом проекте.
Для этого нажимаешь "Tools" -> Resource Editor, предпоследня иконка "Add custom resource", выбираешь файл манифеста.
Двойной клик по ресурсу в появившемся дереве.
Указываешь: тип: #24, ID: 1. Язык - не важно.
Подключил методом 2 манифест Manifest_highestAvailable - прав нету... что то не так делаю?
 
лучше бы сам файл показал.
манифеста?
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>
 
Последнее редактирование модератором:
емае)))
когда скомпиллируешь тогда работает!


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

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

VB.NET / VBA:
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
 
и остальные секции манифеста также надо поправить под себя.
А по стилям, имхо, можно просто убрать этот блок с dpiAware и не заморачиваться, если нет каких-либо причин почему он нужен.
Кстати, тут не упомянули ещё третий вариант подключения манифеста. Можно положить манифест рядом с файлом назвав его типа filename.manifest
 
Тоже читал,но решил по второму варианту попробовать.
Кстати неплохо бы это все описать где нибудь.
Я многое переделал,как запишу скину сюда - если вдруг найдутся желающие проверить на хр и вин*64 )
 
Можно положить манифест рядом с файлом назвав его типа filename.manifest
Можно, но там нужно в проекте MS Visual Studio указывать ссылку на этот файл. А как это делать в IDE VB6 я не знаю.
Кстати неплохо бы это все описать где нибудь.
Все принципы и способы составления описаны в теме Зачем Win32-приложению манифест?
.
 
Я вспоминал все - где читал)
 
Koza Nozdri, кстати, у меня в примере манифеста нарушено такое правило:
Код:
name="CompanyName.ProductName.YourApplication"
т.е. там не должно быть пробелов (где-то читал спецификацю, по-моему, на MSDN).
Оно и без этого нормально работает, но все таки лучше заменить пробелы на точки.

И еще
Код:
   <application xmlns="urn:schemas-microsoft-com:asm.v3">
       <windowsSettings>
           <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
       </windowsSettings>
   </application>

Вот эту секцию лучше убрать. Если не ошибаюсь, она запрещает автоматическое масштабирование
формы на другом разрешении экрана. Но как то не всегда помогает. Имхо, лучше не указывать.
 
Назад
Сверху Снизу