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

Переводчик Google

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,914
Решения
27
Реакции
7,098
Также у тебя идет запрос 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>

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

Похожие темы

Назад
Сверху Снизу