Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Создание собственного Windows инсталлятора

#c_sharp #cpp #windows #windowsinstaller


Большинство инсталляторов создаётся при помощи разных утилит (WiX, Inno Setup, Install
Shield и т.д.). Меня интересует вопрос создания инсталлятора с собственным UI, как
это сделано, например, у Kaspersky Anti-Virus и у Visual Studio.

Возможно ли использование .NET Framework в таких делах или потребуется чистый C++?
Не будет ли ни у кого ссылок на пояснения того, что конкретно должен делать инсталлятор?
    


Ответы

Ответ 1



Для создания кастомного UI через WIX можно использовать Burn / BootstrapperApplication - стандартный способ для создания оберток поверх MSI. Пример для WPF есть в src-пакете WiX, в папке src\Setup\WixBA. Прикручивается (судя по документации) примерно так: Собирается DLL с UI (WixBA из примеров) В bundle.wxs (есть в стандартном шаблоне WiX для VS) добавляется Сам по себе кастомный UI - это просто класс-наследник BootstrapperApplication в сборке, отмеченной атрибутом BootstrapperApplicationAttribute. Пример конфига:
Более подробные примеры: Custom WiX Burn bootstrapper user interface? Creating a custom UI installer with WIX Burn Bootstrapper Author Bootstrapper Application for a Bundle Альтернативный вариант без burn / .NET, который (в теории) можно прикрутить к любому msi-инсталлятору - прописывание EmbeddedUI DLL в таблице MsiEmbeddedUI. Базовый пример и требования к dll расписаны в MSDN, Using an Embedded UI.

Ответ 2



Создавать инсталлятор полностью с нуля (без использования модели Windows Installer), только ради красивого интерфейса, наверное не стоит. Установить приложение легко, сложнее корректно его удалить во всех ситуациях, не оставив мусора и не запоров настройки системы - особенно если программа меняет ассоциации файлов, устанавливает свои расширения проводника, регистрирует COM-объекты и т.п. Инсталлятор в Windows Installer состоит из двух частей: Файл *.MSI - это база данных, которая содержит информацию о структуре приложения, его файлы (либо информацию, где они лежат, если они не встроенные), перечень изменений в реестре и др. Его можно создавать с помощью стандартной утилиты Orca.exe из Windows SDK или с помощью какой-либо сторонней утилиты. Приложение-обертка (setup.exe), которое проверяет наличие необходимой версии Windows Installer, при необходимости предлагает пользователю ее установить, а затем запускает установку самой программы с помощью функции MsiInstallProduct. Они могут по разному между собой соотноситься (MSI внутри EXE, MSI в папке рядом с EXE, EXE скачивает MSI с интернета), но суть одинакова. Приложение-обертка может использовать либо стандартный интерфейс Windows Installer, либо отключить его и зарегистрировать свой (вызовами MsiSetInternalUI/MsiSetExternalUI перед MsiInstallProduct). Можно использовать любую GUI-технологию для создания своего интерфейса, а затем передать параметры в MSI с помощью строки свойств типа TARGETDIR="C:\Program Files\MyApp" ADDLOCAL="Feature1, Feature2". См. данные разделы документации: Общая документация по Windows Installer Windows Installer for Game Developers Windows Installer Development Tools

Ответ 3



Используйте графические интерфейсы, такие как GDI, GDI+, DirectDraw если хотите инсталлятор со своим гуи. Для работы с файлами(распаковка и т.д.) Вам понадобятся такие WinApi функции как CreateFile WriteFile ReadFile. Файлы, которые Вы будете устанавливать могут быть как ресурсами exe'шника, так и отдельным файлом. Запись в реестр тоже через WinApi - RegCreateKeyEx() RegOpenKeyEx() RegCloseKey() RegGetValue() RegSetValueEx() RegDeleteValue().

Ответ 4



У нас используется NSIS (http://nsis.sourceforge.net/Main_Page). Достаточно просто и удобно. Одним из основных требований к инсталлятору является минимизация всех внешних зависимостей (таких как дотнет или прочие библиотеки) и высокая отказоустойчивость. Так же можно посмотреть в сторону самораспаковывающихся архивовю

Комментариев нет:

Отправить комментарий