为什么不能通过 GPO 安装多语言 MSI?

问题描述

我正在尝试测试 GPO 部署,但遇到了多语言 MSI 部署失败的问题。我有一个多语言 Wix 项目并制作了 2 个 MSI(英语和多语言)。我有两个远程 VM,其中一个充当服务器 (Windows Server 2012 R2),它将 GPO 策略推送到另一个充当客户端 VM (Windows 10)。

这里有一些线索:

  • MSI 包在用户配置 > 策略 > 软件设置下设置
  • 通过 GPO,我能够安装英语,但不能安装多语言。
  • 我能够通过手动安装来安装两者。
  • 我只能通过重新安装来安装多语言(手动安装多语言,然后通过 GPO 重新安装,无需先卸载)
  • 在 MSI 日志(Setup manually via registry 的值为 voicewarmupx)中,前 21 行对于通过 GPO 安装两个 MSI 是相似的。 (查看下面的附录)
  • 在多语言版本的 MSI 日志中,在第 22 行,有一行显示 MainEngineThread is returning 1605(查看附录)。 error code 表示该程序正在尝试对当前未安装的某些内容执行操作,但我不确定如何处理。
  • 此 WIX 项目包含自定义操作,因此我设置了一段代码来尽早记录会话(在 FindRelatedProducts 节点下的 InstallUISequence 之前创建自定义操作)但它没有出现在日志中,因此这可能意味着错误发生得更早。

出了什么问题?

附录

这些是我在用户配置 > 策略 > 软件设置下为服务器中的两个 MSI 设置的 GPO 设置。

enter image description here

这是成功的日志(英文)

enter image description here

这是失败的日志(多语言)

enter image description here

解决方法

免责声明:我没有设置来测试这是否真的有效,但请试试这个:


当您单击“高级...” 按钮时,请尝试选择“部署此程序包时忽略语言” 选项 (source) :

GPO


链接:

,

2021 年 6 月 23 日更新

我将问题转发到 Wix github 页面,有人能够帮助找出根本原因。您可以查看他们的reply here

您宣传了产品 {4AC8B148-A051-4CC4-86D4-8D2079A8CF54},然后尝试在产品 {e4bedd32-4df6-475e-aef5-b12a58497a1c}(系统中不存在)上执行交易(我假设是将其从广告转换为已安装)。

基本上,在宣传 MSI 时,为了识别 MSI 文件中包含的产品,任何嵌入的转换似乎都将被忽略。然而,在安装时,会自动应用嵌入式“语言转换”。

如果您直接安装了 MSI,而没有先宣传它们,那可能会奏效。

然后,解决方案是要么简单地设置一个 productID 而不是星号 (*) OR 将所有多语言 MSI 的 productID 与主安装程序的 productID 同步生成多语言 MSI。

就我个人而言,我选择了第二个选项,我使用 wirunsql + 批处理脚本,如下所示:

REM Get the product ID from the installer that you want to make into a multi-language installer
FOR /F %%a IN ('C:\Windows\System32\cscript.exe .\wirunsql.vbs %RELEASEDIR%\en-US\installer.msi "SELECT Value From Property WHERE Property = 'ProductCode'"') DO ( SET ENUSGUID=%%a&& echo ENUSGUID )

REM Use wrunsql.exe to update the product ID of German language installer
C:\Windows\System32\cscript.exe .\wirunsql.vbs %RELEASEDIR%\de-DE\installer.msi "UPDATE Property SET Value='%ENUSGUID%' WHERE Property='ProductCode'"
...
REM repeat for other installers in other languages
...
REM finally extract the transform files from each installer and inject into the main installer

旧答案

显然,仅当部署的 MSI 使用中性语言 (LCID = 0) 或英语进行安装时,GPO 部署才有效。如果不是,GPO 将在您的 LCID 列表中选择最低的语言代码 ID (LCID) 作为安装的默认语言。如果目标操作系统中不存在所选 LCID 的语言包,则部署将失败。不过,我不确定这与错误代码 1605 有何关系。

我不确定如何在 Wix 工具集中执行此操作,但绝对可以在 MSI 编辑器(例如 Orca)中完成。只需转到“查看”>“摘要信息”,然后将 0 添加到“语言”字段中的 LCID 列表中,如下所示。

警告

显然,在您的 MSI 中设置中性语言似乎会使 Windows Installer 在手动运行时以英语启动。它不遵循操作系统的区域格式。

I

来源:https://www.advancedinstaller.com/forums/viewtopic.php?f=2&t=29094&p=76677#p76677

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...