Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 无法使MajorUpgrade与使用不同安装程序生成的安装程序一起工作_Installation_Wix - Fatal编程技术网

Installation 无法使MajorUpgrade与使用不同安装程序生成的安装程序一起工作

Installation 无法使MajorUpgrade与使用不同安装程序生成的安装程序一起工作,installation,wix,Installation,Wix,我有一个问题,让一个wix安装程序做一个主要的升级,当以前的版本安装程序是由一个不同的工具包。我的产品定义如下: <Product Version="!(bind.FileVersion.baustatik.exe)" Id="*" Name="DIE Anwendungen" Language="0" Codepage="1252" Manufacturer="D.I.E. Software GmbH" UpgradeCode="6DCA3BAD-77E9-41AE-

我有一个问题,让一个wix安装程序做一个主要的升级,当以前的版本安装程序是由一个不同的工具包。我的产品定义如下:

    <Product Version="!(bind.FileVersion.baustatik.exe)" Id="*" 
Name="DIE Anwendungen"  
Language="0" 
Codepage="1252" 
Manufacturer="D.I.E. Software GmbH" 
UpgradeCode="6DCA3BAD-77E9-41AE-8F72-B92DE136C499">

<Package InstallerVersion="400"  
Compressed="yes" 
InstallScope="perMachine" 
InstallPrivileges="elevated" />

<MajorUpgrade  
AllowDowngrades="no" 
AllowSameVersionUpgrades="no"  
DowngradeErrorMessage="Es ist bereits eine neuere Version von [ProductName] installiert." />
<Bundle Name="DIE Anwendungen" 
Version="!(bind.packageVersion.The32bitMsi)" 
Manufacturer="D.I.E. Software GmbH" 
UpgradeCode="6DCA3BAD-77E9-41AE-8F72-B92DE136C499"
HelpUrl="https://www.die.de/impressum" 
Copyright="Copyright D.I.E. Software GmbH" 
HelpTelephone="0800 343 2255"
UpdateUrl="https://www.die.de/downloads.aspx"
IconSourceFile="$(var.SolutionDir)applications\xfalt\xfalt.loader\baustatik.ico"
AboutUrl="https://www.die.de">    

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
        <bal:WixStandardBootstrapperApplication 
         LogoFile="res/banner.png"
         ThemeFile ="res/ClassicTheme.xml"
         LocalizationFile="res/ClassicTheme.wxl"
         SuppressOptionsUI="yes" 
         LicenseUrl=""/>
    </BootstrapperApplicationRef>

。。。。。其他东西

上述操作将生成一个msi。msi被链接在一个包中。捆绑包的定义如下:

    <Product Version="!(bind.FileVersion.baustatik.exe)" Id="*" 
Name="DIE Anwendungen"  
Language="0" 
Codepage="1252" 
Manufacturer="D.I.E. Software GmbH" 
UpgradeCode="6DCA3BAD-77E9-41AE-8F72-B92DE136C499">

<Package InstallerVersion="400"  
Compressed="yes" 
InstallScope="perMachine" 
InstallPrivileges="elevated" />

<MajorUpgrade  
AllowDowngrades="no" 
AllowSameVersionUpgrades="no"  
DowngradeErrorMessage="Es ist bereits eine neuere Version von [ProductName] installiert." />
<Bundle Name="DIE Anwendungen" 
Version="!(bind.packageVersion.The32bitMsi)" 
Manufacturer="D.I.E. Software GmbH" 
UpgradeCode="6DCA3BAD-77E9-41AE-8F72-B92DE136C499"
HelpUrl="https://www.die.de/impressum" 
Copyright="Copyright D.I.E. Software GmbH" 
HelpTelephone="0800 343 2255"
UpdateUrl="https://www.die.de/downloads.aspx"
IconSourceFile="$(var.SolutionDir)applications\xfalt\xfalt.loader\baustatik.ico"
AboutUrl="https://www.die.de">    

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
        <bal:WixStandardBootstrapperApplication 
         LogoFile="res/banner.png"
         ThemeFile ="res/ClassicTheme.xml"
         LocalizationFile="res/ClassicTheme.wxl"
         SuppressOptionsUI="yes" 
         LicenseUrl=""/>
    </BootstrapperApplicationRef>

我已经证实了这一点 -我使用相同的升级代码 -我正在为每次更新构建一个新的产品代码(*) -我正在使用相同的语言id(语言:0) - !(bind.FileVersion.baustistik.exe)生成我期望的版本信息

当我像这样构建安装程序时,安装,增加版本号,构建和安装(都使用wix),主要的升级就会发生

当我为以前的版本(使用“高级安装程序”生成的版本)安装安装程序时(升级代码相同),然后安装使用wix生成安装程序的较新版本时,主升级不起作用。i、 e:没有从以前版本中删除任何文件或startmenu条目,我在控制面板中有两个条目

有什么建议可能导致这种情况吗

(编辑)

我照博格丹的建议做了。但是,完整日志没有任何有用的信息

FindRelaten产品: MSI(c)(8C:88)[17:34:20:741]:执行操作:FindRelatedProducts MSI(c)(8C:88)[17:34:20:741]:注:1:22052:3:ActionText Aktion 17:34:20:查找最新产品。他是一个非常聪明的人 妊娠期17:34:20:发现最新产品。 Aktion beendet um 17:34:20:查找最新产品。吕加贝维特1号

。。。后来:

MSI(s)(2C:04)[17:34:24:762]:执行操作:FindRelatedProducts MSI(2C:04)[17:34:24:762]:注:1:22052:3:ActionText 妊娠期17:34:24:发现最新产品。 MSI(2C:04)[17:34:24:762]:跳过FindRelatedProducts操作:已在客户端完成

RemoveExistringProducts提供:

Aktion gestartet um 17:34:24:移除现有产品。 MSI(2C:04)[17:34:24:841]:注:1:22052:3:错误 MSI(2C:04)[17:34:24:841]:注:1:22282:3:错误4:从
错误中选择
消息
MSI(2C:04)[17:34:24:841]:注:1:22052:3:错误
MSI(2C:04)[17:34:24:841]:注:1:22282:3:错误4:从
错误中选择
消息
,其中
错误
=23
MSI(2C:04)[17:34:24:841]:注:1:22052:3:错误
MSI(2C:04)[17:34:24:841]:注:1:22282:3:错误4:从
错误中选择
消息
,其中
错误
=16
MSI(2C:04)[17:34:24:841]:注:1:22052:3:错误
MSI(2C:04)[17:34:24:841]:注意:1:22282:3:错误4:从
错误中选择
消息
,其中
错误
=21
Aktion beendet um 17:34:24:删除现有产品。吕加贝维特1号

关于perUser/perMachine:

在我的(wix)包(参见代码)中,我有“InstallScope='perMachine'”,在“AdvancedInstaller”中,我有“安装类型:仅每台机器”——我假设这是相同的

还有其他想法吗

(编辑2)

我已经按照PhilDW的建议做了,并使用orca打开了新旧msi的升级表。我确实发现了以下几点

旧msi:

新msi:


然而,我不知道该如何理解这一点。有了这些信息,有人知道为了升级旧的msi,我必须在wix代码中添加什么吗

我解决问题的方法是手动设置预定义的
重新安装
重新安装模式
属性,如下所示

<Product>

<!-- ... your code ... -->

<SetProperty Id="REINSTALL" Value="ALL" After="FindRelatedProducts">Installed AND REMOVE&lt;&gt;"ALL"</SetProperty>
<SetProperty Id="REINSTALLMODE" Value="omus" After="FindRelatedProducts">Installed AND REMOVE&lt;&gt;"ALL"</SetProperty>

<!-- ... your code ... -->

</Product>

安装并删除“全部”
安装并删除“全部”
。。。其中,
OMU
指的是这些代码:

o:如果文件丢失或版本较旧,请重新安装。
m:重写注册表表中所有需要的注册表项,这些注册表项将转到 HKEY_本地_机器 或 HKEY_类_根 注册表配置单元。
u:重写注册表表中所有需要的注册表项,这些注册表项将转到 HKEY_当前用户 或 香港大学用户 注册表配置单元。
s:重新安装所有快捷方式并重新缓存所有图标,覆盖所有现有快捷方式和图标

您也可以使用
e
a
代替
o

e:如果文件丢失,或者是相同或更旧的版本,请重新安装。
答:强制重新安装所有文件,无论校验和或版本如何


(摘自Microsofts development center)

即使升级代码相同,如果软件包的安装类型不同(每个用户或每台机器,这种情况经常发生),或者安装语言不同(您已经检查过),主升级也可能失败


您可以安装新的MSI,在安装过程中,在日志中搜索RemoveExistingProductsFindRelatedProducts。在这些标准操作的旁边,您将看到一条明确的消息,说明为什么跳过升级。

Bogdan走上了正确的道路。但是,日志将指示是否安装了相关的产品,它将显示其产品代码并说明有关其他上下文的内容,而这些内容不在日志中。这意味着您需要直接查看MSI文件中的升级表,以确保最小/最大字段中的版本检查是正确的。在发布的数据中,我看不到验证旧产品的实际版本和升级将搜索的版本的任何内容。这也不会伤害到你的MSI中是否有一个升级表。此处的文档:

您还可以检查语言是否与旧产品匹配,以及属性是否没有OnlyDetect集(不太可能,但要彻底)

<