Большинство инсталляторов создаётся при помощи разных утилит (WiX, Inno Setup, Install Shield и т.д.). Меня интересует вопрос создания инсталлятора с собственным UI, как это сделано, например, у Kaspersky Anti-Virus и у Visual Studio.
Возможно ли использование .NET Framework в таких делах или потребуется чистый C++? Не будет ли ни у кого ссылок на пояснения того, что конкретно должен делать инсталлятор?
Для создания кастомного UI через WIX можно использовать Burn / BootstrapperApplication - стандартный способ для создания оберток поверх MSI.
Пример для WPF есть в src-пакете WiX, в папке src\Setup\WixBA
. Прикручивается (судя по документации) примерно так:
В bundle.wxs (есть в стандартном шаблоне WiX для VS) добавляется
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost" >
<Payload SourceFile="$(var.InstallSourceResources)Bootstrapper\WixBA.dll"/>
<Payload Id="FusionInstallUX.config"
SourceFile="$(var.InstallSourceResources)Bootstrapper\WixBA.BootstrapperCore.config"
Name="BootstrapperCore.config" Compressed="yes"/>
</BootstrapperApplicationRef>
Сам по себе кастомный UI - это просто класс-наследник BootstrapperApplication
в сборке, отмеченной атрибутом BootstrapperApplicationAttribute
.
Пример конфига:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup
name="wix.bootstrapper"
type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore">
<section
name="host"
type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" />
</sectionGroup>
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
<wix.bootstrapper>
<host assemblyName="FusionInstallUX">
<supportedFramework version="v4\Full" />
<supportedFramework version="v4\Client" />
</host>
</wix.bootstrapper>
</configuration>
Более подробные примеры:
Альтернативный вариант без burn / .NET, который (в теории) можно прикрутить к любому msi-инсталлятору - прописывание EmbeddedUI DLL в таблице MsiEmbeddedUI. Базовый пример и требования к dll расписаны в MSDN, Using an Embedded UI.
Используйте графические интерфейсы, такие как GDI
, GDI+
, DirectDraw
если хотите инсталлятор со своим гуи. Для работы с файлами(распаковка и т.д.) Вам понадобятся такие WinApi функции как CreateFile
WriteFile
ReadFile
. Файлы, которые Вы будете устанавливать могут быть как ресурсами exe'шника, так и отдельным файлом. Запись в реестр тоже через WinApi - RegCreateKeyEx()
RegOpenKeyEx()
RegCloseKey()
RegGetValue()
RegSetValueEx()
RegDeleteValue()
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сделал примитивную кнопку с анимацией на MouseEnter и MouseLeaveЕсли быстро провести мышкой через кнопку насквозь, то анимация MouseEnter запустится, потом...