MSI Windows 安装程序中的“找到模糊匹配”错误 1001

Posted

技术标签:

【中文标题】MSI Windows 安装程序中的“找到模糊匹配”错误 1001【英文标题】:"Ambiguous Match Found" Error 1001 in MSI Windows Installer 【发布时间】:2017-07-24 15:51:38 【问题描述】:

我正在努力将应用程序从.NET 3.5 升级到.NET 4.0,最终升级到4.6,它目前在安装过程中崩溃。在将旧的托管 C++ 代码重新语法化为 C++/CLI 时,我进行了很多更改,但是除了 .NET 设置之外,大约 95% 的其他 C# 文件没有被触及。代码也从VS 2010移到VS 2015,目标机器从32位Windows 7移到64位Windows 10。

在目标机器上运行我的新安装程序会产生以下错误框:

错误 1001:在安装的提交阶段发生异常。 此异常将被忽略,安装将继续。 --> 找到不明确的匹配项。

过去的几个错误 1001 与 .NET 版本的差异有关,需要更改代码。这些消息也更具体地说明了哪些文件有问题。

我能够获取工作版本和新版本的日志文件。它们有相似之处,但在旧日志中不存在的突出的一行是:

MSI (s) (6C:A4) [11:17:04:754]: WIN64DUALFOLDERS: 替换 'C:\Program Files (x86)\FOLDER' 文件夹已被阻止 通过 1 掩码参数(文件夹对的 iSwapAttrib 成员 = 0)。

我想知道这是否相关,出现了大量这些行,然后日志看起来与那里不同。如果问题出在代码上,或者像安装程序项目的设置问题,我什至不肯定。有没有人对从这里看的地方有任何想法?

【问题讨论】:

【参考方案1】:

错误 1001 几乎总是自定义操作失败的下游结果,因此它将是代码失败、加载失败等。无论哪种方式,它都需要调试代码路径或加载代码。这些托管代码自定义操作不会以“正常”方式加载。它们是使用反射实例化的,将加载某些版本的运行时,并且某些诸如自动加载配置文件之类的东西将不起作用。在所有人安装中,它们使用系统帐户运行。这些都具有下游影响,可能导致在正常用户加载环境中工作的代码失败(不是由 msiexec.exe 调用的 Dll)。

双文件夹条目不相关。您尚未发布安装项目的体系结构,但 32 位安装项目无法安装到 64 位 ProgramFiles 文件夹。对于 64 位设置项目,您可能希望使用 ProgramFiles64Folder、CommonFiles64Folder 等。

Edit: Ambiguous Match Found 可能是与定位安装程序类类型相关的反射错误。

【讨论】:

我想等到安装稳定后再感谢你,但你是对的 - 遵循兔子洞中的自定义操作最终导致我使用更旧的、不再支持的控件的表单.替换那个控件是它所需要的,非常有义务。

以上是关于MSI Windows 安装程序中的“找到模糊匹配”错误 1001的主要内容,如果未能解决你的问题,请参考以下文章

可执行文件到MSI安装程序

通过安装程序 (MSI) Windows 7 更新 Node.js 时看不到最新版本

MSI 安装程序的可执行文件

如何使用安装项目创建不需要管理员访问权限的 Windows 安装程序 MSI?

windows server 2008安装msi程序是提示必须安装windows installer服务的windows service pack

如何为Java程序创建MSI Windows安装程序?