2014-08-27 23 views
0

我正在更改我們的安裝程序以支持同時安裝多個版本的軟件。如何識別和升級當前的安裝?

這導致安裝了幾個早期版本的產品,我需要讓用戶選擇哪些當前版本應該升級。

目前我使用了一個名爲OLDERFOUND屬性來檢測,如果他們是舊版本在所有:

<Upgrade Id='$(var.UpgradeCode)'> 
    <UpgradeVersion 
       OnlyDetect='yes' 
       Property='OLDERFOUND' 
       Minimum='0.0.0' 
       Maximum='$(var.Version)' 
       IncludeMaximum='no' 
       IncludeMinimum='yes' /> 
</Upgrade> 

在OLDERFOUND蒙山組合框將顯示一個對話框。我使用動態交流#CustomAction項目添加到組合框:

[CustomAction] 
public static ActionResult FillVersionList(Session xiSession) 
{ 
    View view = xiSession.Database.OpenView("SELECT * FROM ComboBox"); 
    view.Execute(); 

    Record record = xiSession.Database.CreateRecord(4); 
    //CURRENTVERSIONS is the name of the combobox property 
    record.SetString(1, "CURRENTVERSIONS"); 
    record.SetInteger(2, 1); 
    record.SetString(3, "foo"); 
    record.SetString(4, "foo"); 
    view.Modify(ViewModifyMode.InsertTemporary, record); 

    record = xiSession.Database.CreateRecord(4); 
    record.SetString(1, "CURRENTIVARVERSIONS"); 
    record.SetInteger(2, 2); 
    record.SetString(3, "bar"); 
    record.SetString(4, "bar"); 
    view.Modify(ViewModifyMode.InsertTemporary, record); 

    view.Close(); 
    return ActionResult.Success; 
} 

我想不出什麼如何做的是

  • 填充組合框所有以前安裝的版本
  • 和然後更新用戶選擇的一個

我試圖找出一種方法來從註冊表中讀取所有版本(我有一個每個版本安裝的註冊表鍵),但沒有提出任何東西。我不知道如何指定更新哪個早期版本。

回答

0

我不明白你爲什麼要用戶選擇升級哪個版本。當您的新產品發佈時,它將有一個升級代碼/產品/軟件包代碼組合,它與之前的安裝相匹配,並且可以僅用於升級該安裝。您無法根據用戶的決定更改該行爲。

瞭解更多關於這裏的升級代碼/產品代碼:

UPGRADE CODE Product vs package vs upgrade code

+0

想我得退後一步,並瞭解更多有關Windows Installer ... – Mohrn 2014-08-28 08:33:46