Wix安装程序-创建始终在tself上重新安装的安装程序

Wix安装程序-创建始终在tself上重新安装的安装程序,wix,installation,upgrade,Wix,Installation,Upgrade,我试图创建一个安装程序,不携带任何文件,但设置了注册表项,并创建一个小文件夹结构,如果不存在 该脚本使用CopyFile将文件从网络位置复制到c驱动器上的文件夹 其想法是创建一个安装程序,每当更新网络文件时,该安装程序都可以重新运行,以便为用户提供本地文件 在同一组件中,CopyFile代码的前面有一行RemoveFile,因此文件应始终以新的方式复制 文件夹结构和注册表项实际上不需要重复,但它们是否重复并不重要 我也不担心卸载,也不担心它会做什么,因为这个安装总是需要的,但我无法在系统中创建一

我试图创建一个安装程序,不携带任何文件,但设置了注册表项,并创建一个小文件夹结构,如果不存在

该脚本使用CopyFile将文件从网络位置复制到c驱动器上的文件夹

其想法是创建一个安装程序,每当更新网络文件时,该安装程序都可以重新运行,以便为用户提供本地文件

在同一组件中,CopyFile代码的前面有一行RemoveFile,因此文件应始终以新的方式复制

文件夹结构和注册表项实际上不需要重复,但它们是否重复并不重要

我也不担心卸载,也不担心它会做什么,因为这个安装总是需要的,但我无法在系统中创建一个又一个安装,所以我确实需要以某种方式进行升级

我目前已经在wxs文件中获得了这些脚本

http://schemas.microsoft.com/wix/2006/wi“>

<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>