已经安装的错误消息未显示

时间:2018-01-30 17:30:08

标签: dialog wix windows-installer

我正在使用自定义对话框构建MSI,但我没有自定义欢迎对话框。我有一个有效的产品ID和升级ID,而AllowSameVersionUpgrades也没有。以下是UI代码,我的Product.wxs中引用了该代码。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
    <WixVariable Id="WixUIBannerBmp" Value="Images\Banner.bmp" />
    <WixVariable Id="WixUIDialogBmp" Value="Images\dialog.bmp" />

    <UI Id="CustomUI">
      <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
      <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
      <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />

      <!--Standard Dialog References needed to compile-Starts-->
      <DialogRef Id="WelcomeDlg" />
      <DialogRef Id="DiskCostDlg" />
      <DialogRef Id="ErrorDlg" />
      <DialogRef Id="FatalError" />
      <DialogRef Id="FilesInUse" />       
      <DialogRef Id="UserExit" />
      <!--Standard Dialog References needed to compile-Ends-->
      <DialogRef Id="CustLicenseAgmtDlg"/>
      <DialogRef Id="InstallDlg"/>

      <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="CustLicenseAgmtDlg">NOT Installed AND NOT PATCH</Publish>
      <Publish Dialog="CustLicenseAgmtDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
      <Publish Dialog="CustLicenseAgmtDlg" Control="Next" Event="NewDialog" Value="BrowsePathDlg">1</Publish>
      <Publish Dialog="BrowsePathDlg" Control="Back" Event="NewDialog" Value="CustLicenseAgmtDlg">1</Publish>
      <Publish Dialog="BrowsePathDlg" Control="Next" Event="NewDialog" Value="InstallDlg">1</Publish>
      <Publish Dialog="InstallDlg" Control="Back" Event="NewDialog" Value="BrowsePathDlg">1</Publish>
    </UI>
    <InstallUISequence>
      <Show Dialog="WelcomeDlg" Before="ProgressDlg">NOT Installed OR PATCH</Show>
    </InstallUISequence>
    <UIRef Id="WixUI_Common" />
    <UIRef Id="WixUI_ErrorProgressText" />
    </Fragment>
</Wix>

第一次,安装程序运行正常并安装文件。但是从下一次开始,它就没有显示错误,它已经安装好了。而是它在闪光灯中从第一个屏幕跳到最后一个屏幕。但是,如果我在VS中重建此MSI项目并运行新安装程序,则会显示错误。我不确定我做错了什么。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您正在混淆正在安装的内容&#39;装置

您明确要求显示您的WelcomeDlg NOT Installed OR PATCH,这意味着您的产品已安装后,您永远不会展示您的WelcomeDlg。 &#34;安装&#34;在这种情况下,是产品已安装时设置的特殊属性。

混淆可能是&#34;这个产品&#34;。这意味着具有相同产品GUID的安装程序已存在于系统中。

我猜你的安装程序中有<Product Id="*">。重建时,您将获得另一个产品GUID,因此当您运行所构建的新安装程序时,即使它具有与旧安装程序完全相同的所有内容,产品GUID也会有所不同。在Windows&#39;眼睛,这是一个完全独立的产品,所以它不会设置&#34;已安装&#34;属性,您将显示您的欢迎对话框。由于您,我认为,您的产品安装时会设置一些属性,它会显示您已经安装的&#34;已安装的&#34;错误。

如果您将显示条件设置为1,我认为您会得到您期望的行为。

<InstallUISequence>
  <Show Dialog="WelcomeDlg" Before="ProgressDlg">1 AND NOT REMOVE~="ALL"</Show>
</InstallUISequence>

我添加了AND NOT REMOVE~="ALL"因为我不太确定如果您尝试卸载没有它的产品会发生什么。我认为卸载时会显示欢迎对话框吗?在对话条件下,您必须使用和不使用额外的AND来测试它。

<小时/>

我认为您应该重新评估这是否实际上是您想要做的,因为这似乎是在您的安装程序中实现的一种奇怪的行为。它应该已经知道它默认安装。

答案 1 :(得分:0)

有4个元素可以控制此行为

  1. 产品ID
  2. 产品升级代码
  3. 产品版本
  4. MajorUpgrade
  5. 如果您希望安装程序在安装了它的版本时正确阻止(并在安装新版本时自行替换),那么您需要这些值看起来像这样

    1. 产品ID = * - 每次构建安装程序时本质上都不同
    2. 产品UpgradeCode =每次使用相同的GUID - 使用uuidgen生成guid并将其硬编码到元素中
    3. 产品版本=相应设置的Major.Minor.Revision版本号

      <Product Id="*" UpgradeCode="guid" Version="1.0.1"
      
    4. 存在MajorUpgrade元素

      <MajorUpgrade AllowSameVersionUpgrades="no" DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
      
    5. 设置这些元素后,一旦安装了1.0.1,将来尝试安装(即使您重建了安装程序)也会失败。

      将版本号转换为1.0.2,重建安装程序并运行安装将导致卸载1.0.1,并安装1.0.2。

      请注意,您可以设置&#34; AllowSameVersionUpgrades&#34;到&#34;是&#34;允许相同的版本重新安装&#34;在现有的