我正在创建一个msi安装程序,其中包含基本目录安装和单个安装后自定义操作。安装程序应支持在所有版本范围(较新版本,较旧版本,相同版本)上重新安装。
除了执行重新安装相同的msi之外,几乎所有内容都正常工作。执行与当前安装的msi相同的msixec时(但可能是其他msiexec命令行属性),安装程序启动并退出但不执行任何操作,并且不会在日志中显示错误。
升级和降级工作正常(指定' AllowDowngrades ="是"')。当我使用与当前安装的版本相同的版本构建新的msi时,也会正确地重新安装。我也试过设置AllowSameVersionUpgrades而不是AllowDowngrades,但没有运气。
有关如何配置我的wx以允许重新安装相同的msi文件的任何提示?目前我的MajorUpgrade看起来像这样:
<MajorUpgrade AllowDowngrades="no" AllowSameVersionUpgrades="yes" Disallow="no" DowngradeErrorMessage="Not allowed to downgrade." IgnoreRemoveFailure="yes" MigrateFeatures="yes" />
我在msiexec输出中看到的是正常重新安装和相同的msi安装失败之间的区别;是安装程序提及“FindRelatedProducts”的开始。返回值0&#39;:
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属性和自定义操作重新配置软件。
答案 0 :(得分:0)
最可能的原因是您无法多次安装相同的MSI。产品由其ProductCode标识,如果该产品已经安装,则没有&#34;再次安装它&#34;。已安装的产品将进入维护模式,这通常是修复(在没有添加或删除功能的情况下)。
如果你真的想要(比方说)10个相同的产品并排安装,那么它们每个都需要是不同的产品(由ProductCode确定)。程序和功能中存在多个相同条目的一般问题,可能存在多个相同的快捷方式,只能使用一次的对象问题(例如服务名称),您可能需要考虑如何在同一条目上维护多个产品关于修补,升级等的系统。
如果您的目标是升级已安装的产品(通常这意味着您已更新文件),那么您需要使用MajorUpgrade元素进行重大升级。这将安装较新的版本并自动卸载以前的版本。但它只能是&#34;相同&#34; MSI如果您的主要升级指定AllowSameVersionUpgrades = yes并且您更改了ProductCode和PackageCode,那么实际上没有办法重新安装相同的MSI - 它可以具有相同的文件和其他内容,但它需要新的产品和包主要升级的代码值。
答案 1 :(得分:0)
我的问题通过Daniel Lee的评论得到了解决-谢谢! 使用msiexec参数/开关REINSTALL和REINSTALLMODE确实允许使用REINSTALL = all和REINSTALLMODE = a干净地重新安装相同的msi文件。