Wix Toolset - 相同的MSI文件不会重新安装

3

我正在创建一个带有基本目录安装和单个后安装自定义操作的msi安装程序。该安装程序应支持重新安装所有版本范围(新版、旧版、相同版本)。

几乎一切都正常工作,除了重新安装相同的msi时。当执行与当前安装的相同的msiexec(但可能有其他msiexec命令行属性)时,安装程序启动并退出,但不执行任何操作,并且在日志中不显示错误。

升级和降级功能正常(当指定'AllowDowngrades="yes"'时)。当我使用与当前安装的相同版本构建新的msi时,重新安装也会正确进行。我还尝试设置AllowSameVersionUpgrades而不是AllowDowngrades,但没有成功。

有关如何配置我的wxs以允许重新安装相同的msi文件的任何提示?目前我的MajorUpgrade看起来像这样:

<MajorUpgrade AllowDowngrades="no" AllowSameVersionUpgrades="yes" Disallow="no" DowngradeErrorMessage="Not allowed to downgrade." IgnoreRemoveFailure="yes" MigrateFeatures="yes" />

在msiexec输出中,我看到普通重新安装和相同的msi安装失败之间的差异是,安装程序开始提到“FindRelatedProducts。返回值0”:

Action 14:12:52: INSTALL. 
Action start 14:12:52: INSTALL.
Action 14:12:52: FindRelatedProducts. Searching for related applications
Action start 14:12:52: FindRelatedProducts.
Action ended 14:12:52: FindRelatedProducts. Return value 0.
Action 14:12:52: AppSearch. Searching for installed applications
Action start 14:12:52: AppSearch.
AppSearch: Property: NETFRAMEWORK45, Signature: NetFramework45
Action ended 14:12:52: AppSearch. Return value 1.
Action 14:12:52: LaunchConditions. Evaluating launch conditions
Action start 14:12:52: LaunchConditions.
Action ended 14:12:52: LaunchConditions. Return value 1.
Action 14:12:52: ValidateProductID. 
Action start 14:12:52: ValidateProductID.
Action ended 14:12:52: ValidateProductID. Return value 1.
Action 14:12:52: CostInitialize. Computing space requirements

虽然成功的升级/降级 msiexec 日志看起来像这样:
Action 18:27:21: INSTALL. 
Action start 18:27:21: INSTALL.
Action 18:27:21: FindRelatedProducts. Searching for related applications
Action start 18:27:21: FindRelatedProducts.
FindRelatedProducts: Found application: {014FD491-292B-4BFC-BCFB-87121C11BCE9}
Action ended 18:27:21: FindRelatedProducts. Return value 1.
Action 18:27:21: AppSearch. Searching for installed applications
Action start 18:27:21: AppSearch.
AppSearch: Property: NETFRAMEWORK45, Signature: NetFramework45
Action ended 18:27:21: AppSearch. Return value 1.
Action 18:27:21: LaunchConditions. Evaluating launch conditions
Action start 18:27:21: LaunchConditions.
Action ended 18:27:21: LaunchConditions. Return value 1.
Action 18:27:21: ValidateProductID. 
Action start 18:27:21: ValidateProductID.
Action ended 18:27:21: ValidateProductID. Return value 1.

我对Wix不太熟悉,所以非常欢迎您提供有关如何修复此问题或我可以尝试什么的任何提示。注意:我不希望同时安装多个相同的msi/程序,但我希望在再次执行相同的msi时强制进行完整的重新安装,而无需手动先执行卸载操作。这是为了通过msiexec cli属性和自定义操作重新配置软件。

2
如果我没有误解,这就是修复操作的作用。您可能需要查看REINSTALLMODE选项,以获得不同于当前所看到的行为。 - Daniel Lee
2个回答

1
最可能的原因是您无法安装相同的MSI超过一次。产品由其ProductCode标识,如果该产品已经安装,则没有“再次安装”的选项。安装的产品将进入维护模式,通常为修复(在无法添加或删除功能的情况下)。
如果您真的想要(比如)10个相同的产品并排安装,则它们各自需要不同的产品(由ProductCode标识)。存在多个相同条目在程序和功能中,可能存在多个相同的快捷方式问题,对象只能使用一次(例如服务名称)的问题,您可能需要考虑如何在同一系统上维护多个产品,包括补丁、升级等等。
如果您的目标是升级已安装的产品(通常意味着您已更新文件),则需要使用MajorUpgrade元素进行主要升级。这将安装更新的版本并自动卸载以前的版本。但是,如果您的主要升级指定AllowSameVersionUpgrades=yes并更改ProductCode和PackageCode,则它只能是“相同的”MSI,因此没有真正的重新安装相同的MSI的方法-它可以具有相同的文件和其他内容,但需要使用主要升级的新Product和Package code值。

感谢您的回复。请查看我原问题中的澄清编辑。 - BasiK

0

我的问题通过Daniel Lee的评论得到了解决 - 感谢! 使用msiexec参数/开关REINSTALL和REINSTALLMODE确实允许使用REINSTALL=all和REINSTALLMODE=a进行相同msi文件的干净重新安装。

REINSTALL

REINSTALL_MODE


在我这种情况下,我需要重启正在运行的服务,以便可以传递新的服务参数给它,REINSTALL_MODE没有相应的选项来实现这一点,你有什么想法吗? - stu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接