我遇到了安装程序的Windows缓存问题 . 我正在尝试进行升级,每次Windows安装程序都启动旧版本的安装程序 . 当我进行升级时,它会抱怨读取旧版本的msi文件时出现问题(因为它不再位于同一目录中) .
我确实更改了UpgradeCode和ProductCode,但保持PackageCode相同 . 我也有不同的ProductVersion代码(2.2.3对2.3.0) .
这是我的代码示例:
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Property="OLDAPPFOUND"
IncludeMinimum="yes"
Minimum="$(var.RTMProductVersion)"
IncludeMaximum="no"
Maximum="$(var.ProductVersion)"/>
<UpgradeVersion Property="NEWAPPFOUND"
IncludeMinimum="no"
Minimum="$(var.ProductVersion)"
OnlyDetect="yes"/>
</Upgrade>
这是安装顺序:
<InstallExecuteSequence>
<Custom Action='SetUpgradeParams' After='InstallFiles'>Installed AND NEWAPPFOUND</Custom>
<Custom Action='Upgrade' After='SetUpgradeParams'>Installed AND NEWAPPFOUND</Custom>
</InstallExecuteSequence>
我得到的错误是:
尝试从文件读取时发生网络错误:
谢谢,
4 回答
不要保持相同的PackageCode .
你真的希望自动生成这个...参考文档:
以下是我们 生产环境 环境的一个例子......
现在这种方法的缺点是它意味着您可能还希望强制执行主要升级,这只需要关注所引用的升级代码 . 现在我们可以利用以下事实:对于Windows Installer程序包,只有前三个字段是重要的,例如1.0.0.1和1.0.0.2都被解释为1.0.0(这在文档中明确提到,所以我们可以依赖它 . )
扩展此逻辑,我们可以在每次构建时自动递增(忽略)第四个版本字段,但在前三个相同时阻止升级 .
好处是对客户完全透明,但是防止内部测试/ QA团队在另一个上面安装一个“构建”,您还需要确保在任何公开发布后立即手动增加前三个版本字段之一 .
您需要保持升级代码相同并更改产品代码(如果您想要升级) .
在InstallExecuteSequence中,您需要以下行
我已经选择在此示例中的installInitialize序列之后执行操作,但是您可以将它们放在其他位置,这将给您不同的效果 .
This is a good reference
这是源代码(或者尽我所能):
http://schemas.microsoft.com/wix/2003/01/wi“>
.....
您的产品元素说什么?
您需要在升级表和产品表中指定相同的升级代码,即
并且它需要在原始的那个,如果它最初没有在那里指定那么也许你可以运行CA以使用shell命令将其删除 .
一切都看起来不错 .
在日志中它是否在“Findrelatedproducts”部分中说了什么?