В нашей среде у нас есть компьютеры, присоединенные к домену Windows 8.1 Enterprise, которые обычно никогда не находятся в сети компании. Мы используем Microsoft Intune для удаленного управления ноутбуками. Мы также используем Intune для загрузки новых программ на ноутбуки. Это отлично работает, когда программы могут быть установлены с помощью установщика MSI.
Однако мы создали собственное приложение для Windows 8.1, которое создает пакет APPX. Распространение / развертывание пакета APPX в качестве неопубликованного приложения оказалось чрезвычайно сложной задачей. Фактически, согласно отзывам команды Intune ( здесь ), это фактически НЕ возможно ...
В качестве обходного пути мы работали над решением, вдохновленным этим блогом , чтобы загрузить пакет appx неопубликованно с помощью установщика MSI с использованием набора инструментов WIX .
Мы хотим поделиться кодом WIX для создания установщика MSI. Этот установщик MSI можно использовать для развертывания приложения на желаемом целевом компьютере, например, с помощью Intune.
MSI сначала скопирует приложение и зависимости в подпапку ProgramFilesFolder, а затем выполнит Dism.exe / online / Add-ProvisionedAppxPackage. команда для загрузки приложения. Примечание: целевая машина должна иметь возможность загружать неопубликованные приложения (это хорошая отправная точка для получения дополнительных сведений ).
Код может быть дополнительно улучшен для обработки зависимостей x64 и очистки приложения во время удаления. .
WIX XML
<?xml version="1.0" encoding="UTF-8"?>
<!-- Versioning -->
<?define InstallerProductVersion = "1.0.0.0" ?>
<!-- Product info -->
<?define AppxPackageName = "YOURAPPNAME.appx" ?>
<?define ProductName = "Title of the app" ?>
<?define ProductManufacturer = "YOUR COMPANY NAME" ?>
<?define UpdateCode = "A GUID" ?> <!-- keep this for version updates -->
<!-- Install settings-->
<?define InstallFolderName = "Folder for installation files" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="$(var.ProductName)" Language="1033" Version="$(var.InstallerProductVersion)"
Manufacturer="$(var.ProductManufacturer)" ="$(var.UpdateCode)">
<Package InstallerVersion="500" Compressed="yes" Comments="your comment" Manufacturer="$(var.ProductManufacturer)"
Description="Installer for $(var.ProductName)" Languages="1033" SummaryCodepage="1252" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<!-- the icon -->
<Icon Id="icon.ico" SourceFile=".\yourIco.ico"/>
<Property Id="ARPPRODUCTICON" Value="icon.ico" />
<Property Id='ARPCONTACT'>info@yourcompany.com</Property>
<Property Id='ARPHELPLINK'>www.yourcompany.com</Property>
<!-- the media -->
<MediaTemplate EmbedCab="yes" />
<Feature Id="ProductFeature" Title="SideloadWithWiXSetup" Level="1">
<ComponentGroupRef Id="ComponentGroup.App" />
<ComponentGroupRef Id="ComponentGroup.Dependencies" />
</Feature>
<UIRef Id="WixUI_Minimal" />
<WixVariable Id="WixUILicenseRtf" Value="end user licence agreement.rtf" />
<CustomAction Id="DISMInstallAppx" Directory="INSTALLFOLDER" Execute="commit" Impersonate="no" ExeCommand="dism.exe /online /Add-ProvisionedAppxPackage /PackagePath:"$(var.AppxPackageName)" /SkipLicense" Return="check" />
<InstallExecuteSequence>
<Custom Action="DISMInstallAppx" After="InstallFiles" >(NOT Installed) OR WIX_UPGRADE_DETECTED OR REPAIR</Custom>
</InstallExecuteSequence>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="$(var.InstallFolderName)">
<Directory Id="DEPENDENCIES" Name="Dependencies">
<Directory Id="DEPENDENCIESx86" Name="x86" />
</Directory>
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<!-- ComponentGroup.App -->
<ComponentGroup Id="ComponentGroup.App" Directory="INSTALLFOLDER">
<!-- Program components -->
<Component Id="Component.AppxPackage" >
<File Id="File.AppxPackage" Source="$(var.AppxPackageName)" KeyPath="yes" Checksum="yes" />
</Component>
</ComponentGroup>
<ComponentGroup Id="ComponentGroup.Dependencies" Directory="DEPENDENCIESx86">
<Component Id="Dependencies.VCLib">
<File Id="File.VCLib" Source="Dependencies\x86\Microsoft.VCLibs.x86.12.00.appx" KeyPath="yes" Checksum="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>