Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
ms_windows_ms_sql:msi_creation_tools [2019/11/06 13:43]
admin [Запуск Powershell-скрипта инсталлятором msi]
ms_windows_ms_sql:msi_creation_tools [2019/11/07 13:09] (current)
admin [Запуск Powershell-скрипта инсталлятором msi]
Line 1: Line 1:
  
 +====== Бесплатные средства создания инсталляторов 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>
 +Инсталлятор не устанавливает никаких файлов. Он просто создает запись об установленном компоненте и запускает скрипт. 
  • ms_windows_ms_sql/msi_creation_tools.txt
  • Last modified: 2019/11/07 13:09
  • by admin