Installation 运行RemovePreviousVersion时,MSI不会安装所有文件
我有一个MSI版本使用WiX版本3 我们正在部署的产品的所有以前的安装程序在指定的配置下运行良好(即:如果存在以前的版本,请删除,然后安装新版本)-但是,我们构建的新MSI在通过“先删除”路径运行时不会安装所有文件 如果我们手动删除现有安装,然后运行新版本,则所有文件都已安装-当我在Orca中检查MSI文件时,文件和功能都会显示出来,并且似乎没有问题 我们已经尝试在启用详细和额外日志记录的情况下运行(Installation 运行RemovePreviousVersion时,MSI不会安装所有文件,installation,wix,windows-installer,wix3,Installation,Wix,Windows Installer,Wix3,我有一个MSI版本使用WiX版本3 我们正在部署的产品的所有以前的安装程序在指定的配置下运行良好(即:如果存在以前的版本,请删除,然后安装新版本)-但是,我们构建的新MSI在通过“先删除”路径运行时不会安装所有文件 如果我们手动删除现有安装,然后运行新版本,则所有文件都已安装-当我在Orca中检查MSI文件时,文件和功能都会显示出来,并且似乎没有问题 我们已经尝试在启用详细和额外日志记录的情况下运行(/l*vx),但是我们所能看到的只是文件是否未注册并随后安装 有什么想法或建议吗?这把我们逼疯了
/l*vx
),但是我们所能看到的只是文件是否未注册并随后安装
有什么想法或建议吗?这把我们逼疯了。你的
步骤是什么样子的?可能是removeexisting在安装后运行,并删除了以前和当前版本中相同的所有文件
我已将安装程序设置为
,以确保在执行其他操作之前完成安装。我不知道这是对是错,但似乎有效
<Upgrade Id="$(var.UpgradeCode)">
<!--Upgrade code found at http://www.nichesoftware.co.nz/blog/200809/upgradable-msi-installations-with-wix -->
<!-- Detect any newer version of this product-->
<UpgradeVersion Minimum="$(var.version)" IncludeMinimum="no" OnlyDetect="yes" Language="1033" Property="NEWPRODUCTFOUND" />
<!-- Detect and remove any older version of this product-->
<UpgradeVersion Maximum="$(var.version)" IncludeMaximum="yes" OnlyDetect="no" Language="1033" Property="OLDPRODUCTFOUND" />
</Upgrade>
<CustomAction Id="PreventDowngrading" Error="Newer version already installed"></CustomAction>
<InstallExecuteSequence>
<!-- Prevent Downgrading-->
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
<InstallUISequence>
<!-- Prevent Downgrading-->
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>
新产品发现
新产品发现
好的,我们会和我所在的其他人交谈,帮助我找到问题的解决方案
我们添加了属性REINSTALLMODE
,并将其设置为amus
。这是什么意思
默认情况下,该属性设置为omus
,这意味着:如果文件丢失或较旧,请重新安装,重写计算机和用户配置单元的注册表,重新安装快捷方式。将此更改为amus
基本上是说:重新安装所有文件
所以,不是100%确定原因是什么-我怀疑可能有奇怪的锁或其他东西,但设置为amus
不会有任何负面影响,所以我们会坚持下去
谢谢你的建议
(此外,有关此属性的更多详细信息可在此处找到:根据默认的自定义操作顺序,Windows Installer在删除任何现有版本的软件之前确定需要安装/覆盖哪些文件。Windows Installer使用“重新安装模式”属性的值告诉它如何决定何时进行覆盖如果重新安装模式包含“o”,则它将只安装版本不同或文件不存在的文件;只有当文件的修改日期为时,才会安装非版本文件。我知道这是一个较旧的线程,但我遇到了解决方案中未涉及的类似问题。在我的情况下,我的DLL实际上是一个较低的版本号此DLL永远不会出现在升级安装上。正在运行
msiexec /i myproduct.msi /l*vx install2.log
检查日志显示该文件从未安装过。它只是没有作为安装的文件之一出现在日志中。MSI明确包含该文件,最好的证据是修复会放置该文件。此外,使用各种工具分解MSI会显示该文件存在。在干净的机器上直接安装总是会奥克
这无助于:
msiexec /i myproduct.msi REINSTALL=ALL REINSTALLMODE=amus /l*vx install3.log
我正在用Wix构建MSI,并且我已经使用这个脚本很多年了。最近我们设置了这个脚本来完全删除我们5.3版本中的旧目录。这在5.2->5.3和5.3->5.4的升级中起到了作用。但是在5.5版本中,DLL都是用新版本的DLL重建的。DLL项目托管在Git中Hub。此特定DLL的生成脚本被设置为“10.0.0.{git rev list--count HEAD}”的程序集版本。该项目已被移动,导致HEAD count从444变为30
wixscript include包含以下内容:
define ProductGuid = "{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}"
因此,我们在每个版本上更新产品guid(而不是产品升级guid)
补救方法是稍微更改此dll的构建脚本,将程序集版本设置为“10.0.1{git rev list--count HEAD}”,可能被视为编号更高的版本
为什么会这样,我无法解释。以前安装的文件是否被锁定或正在使用?这也应该标记为wix@RobSanders-没有文件被锁定(从我所看到的)。在运行卸载之前,会启动一个进程来终止正在运行的应用程序。小升级,而不是大升级?我过去在InstallShield中遇到过类似的问题。感谢您的输入-我的也设置为After=“InstallInitialize”-所以我仍然不知道这个问题的原因是什么:|@ranomore:产品ID是否设置为*?@ranomore:前3个版本工作正常,但第4个版本工作不正常。Out版本看起来像0.1。SPRINT#。SVN#U修订版#@nils#gate:您可能需要检查构建脚本以确保SPRINT#.SVN#U修订版#被替换为wWIX.InstallInitialize可见的第i个实值可能会导致GAC中缺少程序集:请参阅