我正在做一个涉及创建版本1.0.0.0的MSI的PoC;将该版本安装到测试机器上。
接下来,我创建了另一个MSI(相同名称,相同的产品代码,不同的包代码,相同的升级代码)。我只是将一个新的.txt文件添加到原始(v1.0.0.0)MSI的源代码中。我使用WiX创建新的MSI文件,并将其版本为1.1.0.0。
到目前为止一切都很好。
以下是目前为止的代码细分(来自Orca.exe):
ProductCode for msi-v1.0.0.0: {CBCF9206-1539-47B8-9A46-A18C2E40D7A1}
ProductCode for msi-v1.1.0.0: {CBCF9206-1539-47B8-9A46-A18C2E40D7A1}
PackageCode for msi-v1.0.0.0: {AB2B02E4-213E-48C1-9394-E30A75BAF2BE}
PackageCode for msi-v1.1.0.0: {C68D3A88-583A-41BF-A971-CB5E083B8547}
UpgradeCode for msi-v1.0.0.0: {06726F10-FF0B-4534-A008-032A70CACDBB}
UpgradeCode for msi-v1.1.0.0: {06726F10-FF0B-4534-A008-032A70CACDBB}
ProductVersion for msi-v1.0.0.0: 1.0.0.0
ProductVersion for msi-v1.1.0.0: 1.1.0.0
我想要完成的是通过此次要升级部署新的单个.txt文件。我知道有一个名为Small Update的较小类型更新,但这不是这个PoC的发展方向。我们需要更改版本号作为最终游戏的一部分。
我在用于生成MSI的Wix脚本中有这个(我真的不认为这与我的问题有任何关系 - 只包括它因为它中有'Upgrade'一词):< / p>
<MajorUpgrade
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."
AllowDowngrades="no"
AllowSameVersionUpgrades="yes"
/>
我所看到的是,当我跑步时:
msiexec.exe /i FileName.msi REINSTALLMODE=vomus REINSTALL=ALL
我没有提供新的单个.txt文件。我确实看到产品版本(在appwiz.cpl中)从1.0.0.0更改为1.1.0.0,缓存的本地MSI文件(在C:\ Windows \ Installer目录下)确实现在版本为1.1.0.0(由Orca验证) .EXE)。
我很困惑为什么没有部署新的单个.txt文件。
我想我的主要问题是:为什么这个次要升级(即相同的产品代码,差异包代码,差异产品版本)不会提供新文件?
提前感谢任何指针!
答案 0 :(得分:3)
如果您违反了组件规则,您会在日志中看到有关它的内容。这将是SELMGR条目以及有关删除不受支持的组件的信息。如果您没有正确添加文件,可能会发生这种情况。如果在命令行上将MSIENFORCEUPGRADECOMPONENTRULES设置为1进行次要更新安装,则如果违反规则,则安装将失败。
答案 1 :(得分:2)
我会读到:
What happens if the component rules are broken?
和
Dealing with very large number of files
我不是这种自动化的巨大反对者。特别是如果您尝试进行小幅升级和补丁。我经常发现那些对安装程序有所了解的人,并不是真的想要这样做,并且发现它更有趣并且“自动化”以实现自动化的自动化。不要这样做! :)相反,我专注于创建使安装程序开发和维护尽可能简单的流程。 (参见IsWiX on CodePlex)只有经验丰富的开发人员知道他的代码,并且可以就如何部署他的资源做出正确的选择。