WIX 3.9 及更高版本的自定义操作 RegisterComPlus 发生错误

2024-04-07

在 Microsoft,我们长期以来一直使用 WIX 工具集版本 3.5.2519.0 来为我们名为(System Center Service Manager 又名 SCSM)的产品构建安装程序和补丁。 最近我们需要更新到 WIX Toolset 3.14.0.1703,因为该版本支持 TLS1.2。

使用 WIX Toolset 3.14.0.1703 构建我们的项目进展顺利,但在安装它时,我收到以下错误:

然后我用所有WIX版本一一构建了产品,结果如下:

使用 WIX ToolSet 版本 3.8 及更低版本构建的产品运行良好,安装程序运行良好。
但对于 ToolSet 3.9 及更高版本,安装程序失败并出现错误:执行自定义操作 RegisterComPlus 时发生错误

日志片段:

Action start 21:11:37: RegisterTypeLibraries.

MSI (s) (48:B0) [21:11:37:585]: Doing action: SelfRegModules

Action ended 21:11:37: RegisterTypeLibraries. Return value 0.

Action start 21:11:37: SelfRegModules.

MSI (s) (48:B0) [21:11:37:588]: Doing action: RegisterComPlus

Action ended 21:11:37: SelfRegModules. Return value 1.

MSI (s) (48:B0) [21:11:37:589]: Note: 1: 2205 2:  3: Complus 

MSI (s) (48:B0) [21:11:37:589]: Note: 1: 2228 2:  3: Complus 4: SELECT `ComponentId`,  `FileName`, `Component`.`Directory_`, `ExpType`, `Component`.`Action`, `Component`.`Installed`  FROM `Complus`, `Component`, `File` WHERE `Complus`.`Component_` = `Component` AND `Component`.`KeyPath` = `File`.`File` AND (`Action` = 1 OR `Action` = 2) 

Action start 21:11:37: RegisterComPlus.

MSI (s) (48:B0) [21:11:37:591]: Note: 1: 2265 2:  3: -2147287035 

MSI (s) (48:B0) [21:11:37:591]: Machine policy value 'DisableRollback' is 0

MSI (s) (48:B0) [21:11:37:592]: Note: 1: 1402 2: 

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2 

Action ended 21:11:37: RegisterComPlus. Return value 0.

MSI (s) (48:B0) [21:11:37:592]: Note: 1: 1402 2: 

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2 

MSI (s) (48:B0) [21:11:37:592]: No System Restore sequence number for this installation.

MSI (s) (48:B0) [21:11:37:592]: Unlocking Server

MSI (s) (48:B0) [21:11:37:602]: Note: 1: 2717 2: 

_Set_Rollback_RemoveCodeGroup.1CA03A32_06E0_4726_8E63_FEA4484D9D6F 
DEBUG: Error 2717:  Bad action condition or error calling custom action '_Set_Rollback_RemoveCodeGroup.1CA03A32_06E0_4726_8E63_FEA4484D9D6F'.

MSI (s) (48:74) [21:11:37:622]: I/O on thread 720 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 1244 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 3392 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 928 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 680 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 4528 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 2156 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 2316 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 3980 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 5172 could not be cancelled. Error: 1168

MSI (s) (48:74) [21:11:37:622]: I/O on thread 2724 could not be cancelled. Error: 1168

MSI (s) (48:B0) [21:11:37:622]: Product: Microsoft System Center Service Manager -- The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2717. The arguments are: _Set_Rollback_RemoveCodeGroup.1CA03A32_06E0_4726_8E63_FEA4484D9D6F, ,
 

The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2717. The arguments are: _Set_Rollback_RemoveCodeGroup.1CA03A32_06E0_4726_8E63_FEA4484D9D6F, , 
Action ended 21:11:37: INSTALL. Return value 3.

WIX Toolset 3.9 及更高版本中进行的任何更改是否会破坏我的安装程序? 有解决办法吗?


嗯,目前还没有什么建议。这不是一个答案,而是一些尝试让您自助的建议。对于部署问题来说,这种情况经常发生,因为利用有限的可用信息很难调试或确定发生了什么。

在我看来,这可能不是 COM+ 问题,因为自定义操作似乎完成正常:

Action ended 21:11:37: RegisterComPlus. Return value 0.

让我们尝试一些远景。请耐心等待,因为其中很多内容都会存在。鱼雷。完全展开以及所有这些:-)(寻找掩护):

  1. 比较痛苦 - :-):我可能会使用比较工作 MSI 和新 MSI此处找到的比较方法 https://stackoverflow.com/a/48482546/129130。我认为你不会发现很多,但可能应该完成。直接比较MSI并使用dark.exe反编译?后者没有什么逻辑意义,但我想看看 WiX 链接 MSI 的方式是否发生了变化。

  2. 消除复杂性:我喜欢取出复杂的部件,看看其余的设置是否安装正常。这确实是浪费时间,但有时却能说明问题。

    • 我将取出添加自定义操作的合并模块,并验证包的其余部分是否按预期安装。有时,如果自定义操作存在高耦合性(显然),这将不起作用。

    • 您还可以为某些自定义操作设置条件0。这应该会阻止自定义操作运行。你可以加AND 0如果存在现有条件。

  3. 禁用回滚?: 又一个远射。禁用 MSI 回滚并尝试在干净的虚拟机上进行测试安装?只是看看问题是否出在回滚自定义操作中。我会用禁用回滚属性 https://learn.microsoft.com/en-us/windows/desktop/msi/-disablerollback禁用回滚。请注意,禁用回滚并不是解决方案! (必须为其他发现这一点的人提及)。

  4. 自定义操作源访问:如果您有权访问自定义操作源代码,我将尝试使用 Visual Studio 进行交互式调试,如下所述:调试 C# 自定义操作 https://www.youtube.com/watch?v=ayeBB97_NwA。您在调试模式下编译代码(因此您的 MSI 中有调试 dll - 请确保不要意外地包含那些公开发布的!)并从自定义操作中显示一个消息框,然后附加 Visual Studio 调试器并单步执行代码。对于本机代码附加到msiexec.exe,对于托管代码附加到rundll32.exe.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WIX 3.9 及更高版本的自定义操作 RegisterComPlus 发生错误 的相关文章

  • 为什么 msiexec TARGETDIR 似乎不起作用

    I tried msiexec i yarn 1 10 1 msi TARGETDIR C programs qb 软件已安装 但未安装到 TARGETDIR 中 我错过了什么 您可以尝试以下命令行 msiexec exe i yarn 1
  • WiX 安装程序:使用 xslt 和 heat.exe 来更新属性

    我正在尝试为 Windows 服务创建 WiX 安装程序 并且我读到需要将所有文件的 KeyPath 设置为 no WiX 脚本中的 exe 除外 我目前正在使用 Heat exe 生成目录和文件结构 这是我的命令 WIX bin heat
  • Wix:如何警告用户而不是使用属性终止安装?

    我正在 x64 计算机上搜索 Microsoft Access 数据库引擎的注册表项 这是我的代码
  • MSDeploy 是否足够“友好”,或者可以将其封装在 MSI 文件中

    您认为 MSDeploy 包是让最终用户在其系统上安装 Web 应用程序的一个不错的选择吗 与使用 MSI 文件安装 Web 应用程序的体验相比如何 有人尝试过将 MSDeploy 包封装在 MSI 包中吗 会起作用吗 据我描述 MSDep
  • Wix 自定义对话框

    目前 我们的安装向导使用的是 Wix 经典主题 现在 我们计划改进安装程序的外观和感觉 1 我如何将自定义对话框经典主题更改为其他主题 2 在安装我们的设置时 我们计划显示一些图像 例如幻灯片放映 是否可以像 Wix 中那样显示图像 我是否
  • 显示目录列表控件中的文件

    有没有办法让用户使用 BrowseDlg 选择特定文件 我所能找到的是你只能选择一个文件夹 我相信文件选择是正在使用的 常见 功能之一 任何人都可以提供一些关于如何实现这一目标的建议 Thanks Update 我正在考虑为此创建一个 C
  • msiexec 返回负数

    安装 MSI 时 我从 msiexec 收到奇怪的返回代码 即 2147021886 我想我记得在某处读到这是某种格式或编码问题 但我找不到参考 我还发现一个微软页面谈论 PS2 o 存在负返回码问题 但这种情况发生在 PS5 0 中 神奇
  • 强制用户使用 Burn 重新启动计算机

    我有一个使用 WiX 3 6 创建的引导加载程序Burn http en wikipedia org wiki WiX Burn并想知道是否有类似的命令
  • 以提升用户身份在 wix 中运行 CustomAction

    据我所知 WiX 支持两种 CustomActions 延迟 运行此操作的用户 默认情况下 被提升 但它不是运行安装的用户 例如 LocalSystem 或类似的用户 立即 运行此操作的用户 默认情况下 未提升 这是首先运行安装程序的用户
  • 成功后动态改变EndDialog中的RTF内容

    多亏了这个question https stackoverflow com a 33679439 1076116 我能够执行自定义操作来临时更新和动态修改 MSI 数据库 简而言之 我正在做 CustomAction public stat
  • 如何确定现有应用程序的安装范围?

    我有一个基于的安装程序WixUI Advanced允许用户选择安装范围 每个用户或机器范围 升级时 安装了较低版本的现有应用程序 我想隐藏安装范围屏幕并自动选择他们上次选择的安装范围 如何判断先前安装使用的安装范围 Edit 查看我的 MS
  • 使用 WiX 将程序集放入 GAC 和安装路径中

    我刚刚开始学习如何使用 WiX 但遇到了障碍 我的软件包使用第三方库 该库要求 GAC 和软件包安装目录中都存在一些文件 使用 WiX 我可以使文件显示在安装目录或 GAC 中 但不能同时显示在两者中 有什么办法可以解决这个问题吗 这里有一
  • 如何创建 heat.exe 收集的文件的快捷方式?

    使用 WiX Toolset 3 10 并尝试创建已使用 WiX Toolset 收获的某些文件的快捷方式heat exe效用 如 WIX bin heat exe dir SourceDir nologo platform x64 ke
  • WIX MSI 软件包卸载

    我正在使用 WIX 作为安装程序包 当我通过双击原始 msi 包卸载该包时 一切都很好 当我从控制面板卸载时 它会给我一个最小的用户界面卸载 我已在 MSI 中写入一个自定义操作 询问用户是否要卸载某些数据库等 最小 UI 卸载时不会发生这
  • 使用 元素通过 Wix 运行 SQL 脚本文件

    我是 Wix 安装程序的新手 我有一个要求 必须提供 SQL Server 登录凭据并从特定路径运行脚本 我不明白出了什么问题 项目已成功构建并创建了 msi 运行后我收到以下错误 错误26204 错误 2147217900 无法执行SQL
  • WiX - 通过检查修订来防止降级

    我正在寻找一种方法来防止我的应用程序降级 但 问题 是 我必须检查修订号 例如 安装 1 0 0 1 时应该可以安装 1 0 0 2 但安装 1 0 0 2 时不应该安装 1 0 0 1 我知道 Element MajorUpgrade 仅
  • Wix:动态添加功能

    我们正在使用 Wix 为我们的软件构建 msi 我们有一些要在目标机器上实现的组件 插件 每个客户端的插件都不同 我们想要做的是创建一个标准构建并修改 msi 包中的功能列表 有没有办法通过自定义操作动态更改功能列表 例如 从自定义操作中读
  • 使用“Any CPU”而不是“X86”编译wix项目

    当我编译一个wix项目 并且wix通过MSbuild启动所有现有项目的编译时 我可以使用 任何CPU 而不是 X86 或 64位 吗 如果没有 我如何使用 任何CPU 编译项目 如果您的问题是是否可以编译 WIXPROJAny CPU那么答
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序

随机推荐