2017-08-14 47 views
0

我不愿意在这个时候问这个问题,因为我再说一遍WiX - Doing a major upgrade on a multi instance install ......然而,我希望我的问题将得到回答:)在多实例主要升级安装程序

我有多个安装程序实例:

<Product Id="{GUID}" UpgradeCode="{GUID}" Version="!(wix.Version)" Name="MyProduct" Manufacturer="MyCompany"> 

    <MajorUpgrade Schedule="afterInstallExecute" DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 

    <Property Id="INSTANCEID" Value="Default" /> 
    <InstanceTransforms Property="INSTANCEID"> 
    <Instance Id="I01" ProductName="MyProduct_I01" ProductCode="{GUID}" UpgradeCode="{GUID}" /> 
    <Instance Id="I02" ProductName="MyProduct_I02" ProductCode="{GUID}" UpgradeCode="{GUID}" /> 
    . 
    . 
    . 
    <Instance Id="I49" ProductName="MyProduct_I49" ProductCode="{GUID}" UpgradeCode="{GUID}" /> 
    <Instance Id="I50" ProductName="MyProduct_I50" ProductCode="{GUID}" UpgradeCode="{GUID}" /> 
    </InstanceTransforms> 
</Product> 

为了清楚起见,每一个新版本使用:

  • 不同的版本号
  • (在前3个数字中的至少一个不同)
  • 为每个实例不同的产品代码
  • 为每个实例
  • 我安装的每个产品具有域管理员权限

在更改产品代码每一个新版本我用同样的一个同样的升级代码每个版本,尽管它有点笨拙(永久保留已删除的组件),但重新安装过程已经结束。

但是,现在,随后使用不同版本的重新安装使msiexec.exe将所有组件视为丢失,从而导致安装失败。它看起来好像是时候过渡到重大升级!

升级用简单的方式

msiexec.exe /i "installer.msi" /n {OLD_VERSION_PRODUCTCODE}

提示一个错误信息:

系统管理员已设置策略,以防止此安装。经由

升级重新安装

msiexec.exe /i "installer.msi" /n {OLD_VERSION_PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus

(因为新产品也试图与REINSTALLMODE=amus是一种新的安装,但没了)

记录的每个组件作为缺席和没不碰任何文件(升级报告成功):

已安装:无;要求:无;行动:空

我很茫然 - 我错过了什么?

回答

0

我发现了一个尴尬的解决方案,但它仅适合一个尴尬的问题:

<SetProperty Id="REINSTALL" Value="" Before="AppSearch" /> 
<SetProperty Id="REINSTALLMODE" Value="" Before="AppSearch" /> 

通过取消REINSTALL性能我莫名其妙地跳过了重大升级许可的障碍,避免真正的重新安装,留下我与新版本。

我会高兴地接受一个更正统的解决方案,特别是不涉及Windows Installer属性的操作...