WiX/MSI: 使用 MS Intune 时无法部署由 heat 工具收集的文件

WiX/MSI: could not deploy files harvested by heat tool when using MS Intune

我使用 WiX 工具集 (3.10) 在 64b 机器上开发了一个 32b MSI 安装程序。 它已经在具有不同 Windows (7, 8.1, 10) 的 32b 和 64b 平台上进行了测试,并且没有任何问题。

当我尝试通过 Microsoft Intune 安装我的 MSI 时,问题就出现了。 (它可以很好地与其他工具一起进行大规模部署) 执行全新安装时,提示用户插入MSI文件(选择后,安装顺利,但不是大规模部署的目的)。

我发现当我从使用加热工具收集的 MSI 文件中删除时,问题没有发生。 命令是(通过 Visual Studio 传递):

"$(WIX)\bin\heat.exe" dir "C:\SOURCE_PATH" -ke -scom -frag -srd -ag 
  -var var.Resources -cg ResourcesGroupId -dr INSTALLDIR_RES 
  -out "$(ProjectDir)Source\Fragments\HarvestedResources.wxs"

此组件组已添加到包含所有其他组件的主要功能。

目标目录创建为:

<DirectoryRef Id='INSTALLDIR_RES'>
  <Component Id='cmp_ResDiR' Guid='{SOME_GUID}'>
    <CreateFolder />
    <RemoveFolder Id='INSTALLDIR_RES' On='uninstall' />
  </Component>
</DirectoryRef>

INSTALLDIR_RES 是位于 INSTALLDIR 下的兄弟路径。 日志显示 ComponentRegistry 已完成,退出代码为 1(成功)。

安装范围是每台机器,已启用提升安装。安装期间使用的所有属性都标记为:

secure="yes" admin="yes"

并且在 AdminPropertiesSecureCustomProperties 下可见(通过 Orca 检查)。不过,我没有使用任何 CustomAction 来部署此资源。

Intune 如何影响我的 MSI?我错过了什么?

该问题仅部分与 MS Intune 相关,与 heat.exe 和收集文件完全无关。 结果发现有两个问题:

  1. MSI 是使用 MS Intune 部署的,但没有向用户提供原始 MSI。在安装过程中,MSI 已被复制到临时目录并在安装应用程序后被删除。没关系,虽然访问原始MSI有助于自我修复,这会导致第二个问题:
  2. 在某些机器上,在初始 运行 期间,MSI 正在启动自我修复程序。由于原始 MSI 在硬盘上不可用,系统提示用户按照第一个 post 中所述手动选择 MSI。感谢 great description of self-healing issues in MSI by Stein Åsmul 我能够检测到根本原因(在用户特定路径中带有 regEntry 的主可执行文件的广告快捷方式)并修复它。

总结:MS Intune 不影响部署 heat.exe 收集的文件。