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

Why doesn't installation of multi-language MSI work via GPO?

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

这里有一些线索:

出了什么问题?

附录

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

这是成功的日志(英文)

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

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


当您点击“高级...”按钮时,请尝试select“部署此包时忽略语言”select =36=] 选项 (source):


链接:

2021 年 6 月 23 日更新

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

You advertised the product {4AC8B148-A051-4CC4-86D4-8D2079A8CF54} and then tried to perform a transaction (I assume to transition it from advertised to installed) on the product {e4bedd32-4df6-475e-aef5-b12a58497a1c} (which doesn't exist on the system).

Basically, when advertising an MSI, any embedded transforms would appear to be ignored for purposes of the identification of the product(s) contained in the MSI file. Yet, when installing, embedded "language transforms" are automatically applied.

If you had installed the MSIs directly, without first advertising them, that may have worked.

解决方案是 或者 简单地使用一组 productID 而不是星号 (*) OR 同步所有多个产品的 productID生成多语言 MSI 后,使用主安装程序的产品 ID 的语言 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 的语言包在目标 OS 中不存在,部署将失败。不过,我不确定这与错误代码 1605 有什么关系。

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

警告

显然,在 MSI 中设置中性语言似乎会使 Windows 安装程序在手动 运行 时以英语启动。它不遵循 OS.

的区域格式

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