2015-04-02 175 views
0

我想創建一個安裝程序不「攜帶」任何文件,但沒有設置註冊表項並創建一個小文件夾結構(如果不存在)Wix安裝程序 - 創建安裝程序,總是重新安裝在自己

該腳本確實使用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> 

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

當我運行首次安裝程序,它的工作原理。文件被複制,並且都很好。

然後,我調整我的一個複製文件以強制新的日期/時間,並重新運行安裝程序。它彈出表明它正在收集信息,但不會替換舊版本的文件,所以我認爲安裝程序已經斷定它不需要做任何事情,因爲當前的「最新版本」已經安裝了?

如果我選擇程序和功能中的修復,文件不會更新。

我試着將IncludeMaximum設置爲yes,但似乎沒有幫助。同樣的結果。

我也嘗試了MajorUpgrade命令而不是InstallExecuteSequence,但我得到了相同的最終結果。也許出於不同的原因,但不是很確定。也許沒有正確使用它。

任何人都可以告訴我如何強制我的安裝程序重做它原來所做的一切,即使該版本匹配?

我的客戶端無法創建新的MSI文件,因此更新版本和重建不是一個選項。他們只是想更新網絡文件(模板)並重新運行MSI以獲取本地文件。

MSI的第一次運行也爲模板配置了他們的機器,因此它非常簡單,這正是他們想要的。

感謝

西蒙

+0

您無法重新運行相同的安裝程序 - 它只是進入已安裝產品的維護模式,並沒有真正做太多 - 這不是修復,因爲產品已安裝。修復確實可以恢復受更換規則等因素影響的文件。從我所知道的情況來看,Windows Installer不太適合做你正在做的事情,除非修復日期和修復是你所需要的,所以寫一個程序來修復日期,然後修復已安裝的產品。 – PhilDW 2015-04-02 18:19:35

回答

0

可能是一個壞主意,(我不知道還有什麼這個產品/工具是應該做的),但你可以調理MSI標準動作「PublishProduct」到「 0',以便它永遠不會運行。這樣,您的MSI將安裝並且永遠不會在機器上註冊。您可以一遍又一遍地繼續運行安裝程序,並且永遠不會檢測到安裝了舊版本。

這當然不是'正確'的方式去做的事情,但它的作品。