Wix Installer - 创建始终重新安装的安装程序

时间:2015-04-02 11:18:29

标签: wix installer upgrade

我正在尝试创建一个不“携带”任何文件的安装程序,但会设置注册表项并创建一个小文件夹结构(如果不存在)

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

我们的想法是创建一个安装程序,只要网络文件更新,就可以重新运行该安装程序,以便为用户提供本地文件。

CopyFile代码前面有一个RemoveFile行(在同一个组件中),因此应该始终将文件复制为“fresh”

文件夹结构和注册表项实际上不需要重复,但如果它们不重要。

我也不担心卸载(也不担心它总是需要安装)但是我在系统安装后无法创建安装所以我需要以某种方式进行升级

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

    <InstallExecuteSequence>
        <RemoveExistingProducts After="InstallInitialize"/>
    </InstallExecuteSequence>

当我第一次运行安装程序时,它可以工作。文件被复制,一切都很好。

然后我调整我复制的一个文件以强制在其上新的日期/时间并重新运行安装程序。它会弹出,表示它正在收集信息但不会用旧版本替换该文件,所以我认为安装程序已经断定它不需要做任何事情,因为已经安装了当前的“最新版本”?

如果我在“程序和功能”中选择“修复”,则文件会更新。

我尝试将IncludeMaximum设置为是,但这似乎没有帮助。结果相同。

我也尝试过MajorUpgrade命令而不是InstallExecuteSequence但是得到了相同的最终结果。也许出于不同的原因,但不是很确定。也许没有正确使用它。

有人能告诉我如何强制我的安装程序重做原来所做的一切,即使版本匹配吗?

我的客户端无法制作新的MSI文件,因此无法更新版本和重建。他们只想更新网络文件(模板)并重新运行MSI以获取本地文件。

MSI的第一次运行也为他们的机器配置模板,所以它非常简单,这就是他们想要的。

由于

西蒙

1 个答案:

答案 0 :(得分:0)

可能是一个坏主意(我不确定此产品/工具应该做什么),但您可以调整MSI标准操作&#34; PublishProduct&#34;到&#39; 0&#39;所以它永远不会运行。这样,您的MSI将安装并且永远不会在机器上注册。您可以反复继续运行安装程序,它永远不会检测到安装了旧版本。

当然,这不是正确的&#39;如何处理事情,但它确实有效。