Wix:如果找到以前的版本,则显示自定义对话框

Kyr*_*o M 5 wix wix3.5

我想自定义我的安装程序以在已安装先前版本时显示自定义对话框:在欢迎对话框之后,用户应该看到一个自定义对话框,OldVersionDlg其中包含找到以前版本的信息,并将自动卸载.

但由于某些原因,我在UpgradeVersion元素中null检查它时的属性总是在UI/Publish Dialog.

这是必不可少的代码片段.

Product.wxs:

<Product Id="*" Version="$(var.Version)" UpgradeCode="$(var.ProductId)"
         Language="1033" Name="$(var.ProductFullName)" Manufacturer="$(var.Manufacturer)">
  <Package Description="$(var.ProductDescription)" InstallerVersion="200" Compressed="yes" 
           Manufacturer="$(var.Manufacturer)" />

  <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
  <Upgrade Id="$(var.ProductId)">
    <UpgradeVersion Minimum="1.0.0.0" Maximum="$(var.Version)"
                    Property="PREVIOUSVERSIONSINSTALLED"
                    IncludeMinimum="yes" IncludeMaximum="no" />
  </Upgrade>

  <InstallExecuteSequence>
    <RemoveExistingProducts Before="InstallInitialize" />
  </InstallExecuteSequence>
</Product>
Run Code Online (Sandbox Code Playgroud)

WixUI_Wizard.wxs:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish>
Run Code Online (Sandbox Code Playgroud)

按钮Next不起作用.我检查了PREVIOUSVERSIONSINSTALLED之后设置的日志FindRelatedProducts.如果我在Product.wxs的条件下使用它,那么一切都OK.但在UI配置中它总是如此null.

谢谢你的帮助.

Kyr*_*o M 2

该问题是由WixUI_Wizard.wxs中的第二行引起的。由于某种原因,WiX 总是使用它。因此,为了实现对先前版本的检查,我们需要PREVIOUSVERSIONSINSTALLED从第二个条件中排除:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed AND NOT PREVIOUSVERSIONSINSTALLED</Publish>
Run Code Online (Sandbox Code Playgroud)