如何识别和升级当前的安装?

时间:2014-08-27 10:26:05

标签: c# wix windows-installer upgrade custom-action

我正在更改我们的安装程序,以支持同时安装多个版本的软件。

这导致我们的产品的几个早期版本安装的情况,我需要让用户选择应该升级哪个当前版本。

目前,我正在使用名为OLDERFOUND的属性来检测它们是否是旧版本:

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

在OLDERFOUND上显示一个带有组合框的对话框。我使用c#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;
}

我无法弄清楚该怎么做

  • 使用以前安装的所有版本
  • 填充组合框
  • 然后更新用户选择的

我试图找出一种从注册表中读取以获取所有版本的方法(我为每个版本安装了一个注册表项),但是没有想出任何东西。我不知道如何指定要更新的早期版本。

1 个答案:

答案 0 :(得分:0)

我不明白为什么您希望用户选择要升级的版本。分发新产品时,它将具有与之前安装相匹配的升级代码/产品/包代码组合,并且只能用于升级该安装。您无法根据用户的决定更改该行为。

在此处阅读有关升级代码/产品代码的更多信息:

UPGRADE CODE Product vs package vs upgrade code