Назад | Перейти на главную страницу

Неопубликованная загрузка пакетов приложений через Intune как MSI

В нашей среде у нас есть компьютеры, присоединенные к домену 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:&quot;$(var.AppxPackageName)&quot; /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>