Wix安装程序检测应在何时找到自找

Wix安装程序检测应在何时找到自找,wix,Wix,我有一个奇怪的问题,WiX安装程序似乎检测到一个自我发现,而不是以前发现的 我正在将一个旧的InstallAware项目转移到WiX,因此我已将该项目的升级代码复制到此Product.wxs <Upgrade Id='MyGuid'> <UpgradeVersion OnlyDetect='yes' Property='SELFFOUND' Minimum='!(bind.FileVersion.MainEXE)' IncludeMinimum='yes' Maxi

我有一个奇怪的问题,WiX安装程序似乎检测到一个自我发现,而不是以前发现的

我正在将一个旧的InstallAware项目转移到WiX,因此我已将该项目的升级代码复制到此Product.wxs

    <Upgrade Id='MyGuid'>
  <UpgradeVersion OnlyDetect='yes' Property='SELFFOUND' Minimum='!(bind.FileVersion.MainEXE)' IncludeMinimum='yes' Maximum='!(bind.FileVersion.MainEXE)' IncludeMaximum='yes' />
  <UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND' Minimum='!(bind.FileVersion.MainEXE)' IncludeMinimum='no' />
  <UpgradeVersion Minimum="1.0.0"
          IncludeMinimum="yes"
          OnlyDetect="no"
          Maximum="!(bind.FileVersion.MainEXE)"
          IncludeMaximum="no"
          Property="PREVIOUSFOUND" />
</Upgrade>

<CustomAction Id='AlreadyUpdated' Error='[ProductName] is already installed.' />
<CustomAction Id='NoDowngrade' Error='A later version of [ProductName] is already installed.' />

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallInitialize"/>
  <Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
  <Custom Action='NoDowngrade' After='FindRelatedProducts'>NEWERFOUND</Custom>
</InstallExecuteSequence>

自找的
纽尔费
升级GUID与UpgradeCode属性的my Product标记中的GUID匹配。两个版本之间的产品代码不同,但我不认为让它们相同是个好主意

旧的InstallAware项目安装的版本为4.11.7311.0,并且在此版本的控制面板中可见。我试图通过升级安装并删除旧版本的版本是4.11.7314.0

出于某种原因,每当我尝试运行新的WiX.msi时,它都会抛出[ProductName]已安装消息


我错过什么了吗?因为在我看来一切都是正确的。提前谢谢。Wix工具集v3.11。

好的,我发现了问题,实际上有多个

首先,我通过命令提示符运行安装程序来生成一个日志文件

msiexec /i "C:\Path\To\Installer.msi" /L*V "C:\ProgramData\Install.log"
然后我在这个文件中搜索

FindRelatedProducts

它发现了一个正在设置selffind属性的应用程序,现在我在注册表中搜索GUID,并从测试中发现它是一个旧的,所以我使用

msiexec /x {FoundGuid}
但此时仍然存在问题,因此重复该过程并发现一条消息

FindRelatedProducts:当前安装是每台机器一台。产品{MyGUID}的相关安装是按用户进行的。跳过


所以我所要做的就是将InstallScope从perMachine更改为perUser,它可以正确地检测到。

好的,所以我发现了问题,实际上存在多个问题

首先,我通过命令提示符运行安装程序来生成一个日志文件

msiexec /i "C:\Path\To\Installer.msi" /L*V "C:\ProgramData\Install.log"
然后我在这个文件中搜索

FindRelatedProducts

它发现了一个正在设置selffind属性的应用程序,现在我在注册表中搜索GUID,并从测试中发现它是一个旧的,所以我使用

msiexec /x {FoundGuid}
但此时仍然存在问题,因此重复该过程并发现一条消息

FindRelatedProducts:当前安装是每台机器一台。产品{MyGUID}的相关安装是按用户进行的。跳过


因此,我所要做的就是将InstallScope从perMachine更改为perUser,这样它就可以正确地进行检测。

。编译后,能否在生成的MSI中使用升级表中的屏幕截图进行更新?从外观上看,您需要删除指向SelfFind的UpgradeVersion元素。谢谢您,这不是我在搜索时发现的问题。我会查看并相应更新我的问题。。编译后,能否在生成的MSI中使用升级表中的屏幕截图进行更新?从外观上看,您需要删除指向SelfFind的UpgradeVersion元素。谢谢您,这不是我在搜索时发现的问题。我将检查它并相应地更新我的问题。我忘了添加此链接。如果您已在此上运行dark.exe以将InstallAware MSI反编译为WiX标记,则可能会有许多构造需要消除。我将在虚拟机上进行测试,重点是升级场景。谢谢,我将对此进行阅读。我的MSI现在的行为和我预期的一样,但是当它被放置在引导程序中时,它并没有,但我相信这应该是一个单独的问题。我忘记了添加这个链接。如果您已在此上运行dark.exe以将InstallAware MSI反编译为WiX标记,则可能会有许多构造需要消除。我将在虚拟机上进行测试,重点是升级场景。谢谢,我将对此进行阅读。我的MSI现在的行为和我预期的一样,但是当它被放置在引导程序中时,它并没有,但我相信这应该是一个单独的问题。