Wix安装程序-创建始终在tself上重新安装的安装程序
我试图创建一个安装程序,不携带任何文件,但设置了注册表项,并创建一个小文件夹结构,如果不存在 该脚本使用CopyFile将文件从网络位置复制到c驱动器上的文件夹 其想法是创建一个安装程序,每当更新网络文件时,该安装程序都可以重新运行,以便为用户提供本地文件 在同一组件中,CopyFile代码的前面有一行RemoveFile,因此文件应始终以新的方式复制 文件夹结构和注册表项实际上不需要重复,但它们是否重复并不重要 我也不担心卸载,也不担心它会做什么,因为这个安装总是需要的,但我无法在系统中创建一个又一个安装,所以我确实需要以某种方式进行升级 我目前已经在wxs文件中获得了这些脚本 http://schemas.microsoft.com/wix/2006/wi“>Wix安装程序-创建始终在tself上重新安装的安装程序,wix,installation,upgrade,Wix,Installation,Upgrade,我试图创建一个安装程序,不携带任何文件,但设置了注册表项,并创建一个小文件夹结构,如果不存在 该脚本使用CopyFile将文件从网络位置复制到c驱动器上的文件夹 其想法是创建一个安装程序,每当更新网络文件时,该安装程序都可以重新运行,以便为用户提供本地文件 在同一组件中,CopyFile代码的前面有一行RemoveFile,因此文件应始终以新的方式复制 文件夹结构和注册表项实际上不需要重复,但它们是否重复并不重要 我也不担心卸载,也不担心它会做什么,因为这个安装总是需要的,但我无法在系统中创建一
<Product
Id='*'
Name='Eclipse Template Installer'
UpgradeCode='$(var.ProductUpgradeCode)'
Version='$(var.ProductVersion)'
Manufacturer='Article 10'
Language='1033'>
<Package InstallerVersion='200' Compressed='yes' Comments='Windows Installer Package' />
<Media Id='1' Cabinet='product.cab' EmbedCab='yes' />
<Upgrade Id="$(var.ProductUpgradeCode)">
<UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
<UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="yes"
Property="OLDERVERSIONBEINGUPGRADED"/>
</Upgrade>
当我第一次运行安装程序时,它工作正常。文件已被复制,一切正常
然后,我调整一个复制的文件,强制在其上设置新的日期/时间,然后重新运行安装程序。它会弹出,表明它正在收集信息,但不会用旧版本替换该文件,因此我认为安装程序认为它不需要做任何事情,因为当前的最新版本已经安装好了
如果我在程序和功能中选择“修复”,则文件确实会得到更新
我尝试将IncludeMaximum设置为“是”,但似乎没有帮助。同样的结果
我还尝试了MajorUpgrade命令而不是InstallExecuteSequence,但得到了相同的最终结果。可能是因为不同的原因,但不是很确定。也许用得不对
有谁能告诉我,即使版本匹配,如何强制我的安装程序重做它最初所做的一切
我的客户端无法创建新的MSI文件,因此无法更新版本并重建。他们只想更新网络文件模板,然后重新运行MSI以获取本地文件
MSI的第一次运行还为模板配置了机器,所以这一切都非常简单,这正是他们想要的
谢谢
Simon可能是个坏主意我不确定此产品/工具还应该做什么,但您可以将MSI标准操作PublishProduct设置为“0”,使其永远不会运行。这样,您的MSI将安装并且永远不会在计算机上注册。您可以继续反复运行安装程序,它永远不会检测到安装了旧版本
当然,这不是一种“正确”的方式,但它是有效的。您不能重新运行同一个安装程序-它只是进入已安装产品的维护模式,实际上没有什么作用-这不是修复,因为产品已经安装。修复确实会根据替换规则等还原文件。据我所知,Windows Installer不适合执行您尝试执行的操作,除非您只需要修复日期和修复,所以请编写一个程序来修复日期,然后修复已安装的产品。
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize"/>
</InstallExecuteSequence>