Both sides previous revision Previous revision | |
ms_windows_ms_sql:msi_creation_tools [2019/11/06 13:43] – [Запуск Powershell-скрипта инсталлятором msi] admin | ms_windows_ms_sql:msi_creation_tools [2019/11/07 13:09] (current) – [Запуск Powershell-скрипта инсталлятором msi] admin |
---|
| |
| ====== Бесплатные средства создания инсталляторов MSI ====== |
| https://stackoverflow.com/questions/50225031/windows-service-not-shown-in-add-remove-programs-under-control-panel/50229840#50229840 \\ |
| |
| |
| ====== Wix ====== |
| http://citforum.ru/internet/xml/wix/ \\ |
| https://www.firegiant.com/wix/tutorial/ \\ |
| https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with \\ |
| https://habr.com/ru/post/68616/ \\ |
| https://damienbod.com/2013/09/01/wix-installer-with-powershell-scripts/ \\ |
| https://github.com/damienbod/WiXPowerShellExample \\ |
| \\ |
| **Wix** (Windows Installer XML) - это набор утилит, предназначенный для создания инсталляционных пакетов (**msi**). Пригоден для создания сложных инсталляторов (утверждают, что инсталлятор MS Office (неясно какой версии) был полностью создан с помощью **Wix**)\\ |
| Описание этапов установки хранится в **xml**-файлике - **wsx**. \\ |
| ===== Утилиты, входящие в набор WiX ===== |
| Описание утилит, входящих в набор - https://wixtoolset.org/documentation/manual/v3/overview/alltools.html \\ |
| Основные утилиты: |
| * **candle** - Компилятор, который создает из исходных (**wsx**) файлов объектные (**wixobj**). |
| * **light** - Линкер, который использует объектный **wixobj**-файл и создает на его основе **msi**- или **msm**-файл. |
| * **dark** - Декомпилятор, который разбирает существующий **msi**- или **msm**-файл и создает **wsx**-файл. |
| |
| ===== XML-структура wsx-файла ===== |
| ==== Product ==== |
| Основным объектом верхнего уровня в терминах **WiX** является продукт ([[https://wixtoolset.org/documentation/manual/v3/xsd/wix/product.html|Product]]).Одна инсталляция устанавливает один продукт. Продуктом имеет уникальный идентификатор **GUID**, который представляет собой уникальное 128-битное число. \\ |
| ==== Package ==== |
| Следующим (после продукта) уровнем иерархии является пакет ([[https://wixtoolset.org/documentation/manual/v3/xsd/wix/package.html|Package]]). Он может включать один или несколько файлов — обычно файлы инсталляции **msi**, **msm** (MS Merge Modules) и архивы **cab**.\\ |
| ==== Feature ==== |
| Весь продукт состоит из опций ([[https://wixtoolset.org/documentation/manual/v3/xsd/wix/feature.html|Features]]). Опции — это то, что видит пользователь при инсталляции и что он может выбрать (или не выбирать) для инсталляции. Опции имеют иерархическую структуру: одни **features** могут содержать в себе другие.\\ |
| ==== Component ==== |
| Каждый отдельный элемент инсталляции, такой как файл, ключ реестра и т.д., называется компонентом ([[https://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html|Component]]). Компоненты также имеют уникальные ключи **GUID** (не зависимо от устанавливаемого пакета). \\ |
| ===== Сборка пакета msi ===== |
| Сборка пакета **msi** происходит в два этапа: |
| candle.exe Sample.wxs |
| на выходе - файл **wixobj** |
| light.exe Sample.wixobj |
| на выходе - пакет **msi**. |
| |
| ====== Запуск Powershell-скрипта инсталлятором msi ====== |
| Мне нужно создать инсталлятор **msi**, который бы мог запускаться с правами непривилегированного пользователя, скачивать **powershell**-скрипт с **http**-сервера и запускать его (для распространения средствами SCCM).\\ |
| **wxs**-файл, с помощью которого создается нужный **msi** выглядит так: |
| <code><?xml version="1.0" encoding="UTF-8"?> |
| <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> |
| <Product Id="*" Name="WSL and XServer for Windows" Language="1033" Version="0.0.1" Manufacturer="Sberleasing" UpgradeCode="121F564B-ACAB-DEAD-BEEF-C9B8C11C381A"> |
| <Package Id="*" InstallerVersion="305" InstallScope="perMachine" InstallPrivileges="elevated" Compressed="yes" /> |
| |
| <Media Id="1" /> |
| |
| <Property Id="MSIUSEREALADMINDETECTION" Value="1" /> |
| |
| <Condition Message="Installation requires Administrator privileges"> |
| <![CDATA[Privileged]]> |
| </Condition> |
| |
| <Directory Id="TARGETDIR" Name="SourceDir"> |
| <Component Id="Component_WSL_and_XServer_for_Windows" Guid='1b3844ef-ACAB-DEAD-BEEF-7786e2d5a6c7' /> |
| </Directory> |
| |
| <Property Id='POWERSHELL'>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Property> |
| <!-- My custom actions install scripts--> |
| <CustomAction Id="RunInstallScript" |
| Property="POWERSHELL" |
| ExeCommand='-windowstyle hidden -command $url=\"http://nexus.rdleas.ru/repository/files/JavaDeveloperTools_SetupScripts/Setup_WSL.ps1\"; iex ((New-Object System.Net.WebClient).DownloadString($url))' |
| Return='check' /> |
| |
| <Feature Id="Feature_WSL_And_XServer" Title='WSL and XServer For Windows' Level="1"> |
| <ComponentRef Id="Component_WSL_and_XServer_for_Windows" /> |
| </Feature> |
| |
| <InstallExecuteSequence> |
| <Custom Action="RunInstallScript" After="InstallFinalize"></Custom> |
| </InstallExecuteSequence> |
| |
| <MajorUpgrade Schedule="afterInstallInitialize" AllowDowngrades="no" DowngradeErrorMessage="ok" AllowSameVersionUpgrades="yes" /> |
| |
| </Product> |
| </Wix></code> |
| Инсталлятор не устанавливает никаких файлов. Он просто создает запись об установленном компоненте и запускает скрипт. |