3

我开发了一个安装程序Wix 3.6,它可以成功安装应用程序的所有元素。

现在,每次我给出msi更高版本时,我希望安装程序提示用户卸载它。从现在开始我已经尝试过这个:

<Product 
Id="*" 
Name="!(loc.ProductName)" 
Language="3082" 
Codepage="1252"
Version="1.0.1"
Manufacturer="$(var.ProductManufacturer)" 
UpgradeCode="$(var.UpgradeCode)">

<Property Id="PREVIOUSVERSIONINSTALLED" Secure="yes" />
<Upgrade Id="$(var.UpgradeCode)">
  <UpgradeVersion Minimum="1.0.0.0" Maximum="99.9.9.9" IncludeMiminum="yes" IncludeMaximum="no" Property="PREVIOUSVERSIONSINSTALLED" />
</Upgrade>

<InstallExecuteSequence>
  <RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>

此代码成功卸载了我计算机上任何以前安装的版本。但它不会询问用户是否确定这样做。

我需要的是 Wix 安装程序来提示用户说出如下消息:

您的 [ProductName] 的早期版本已安装。你想卸载它吗?[是的| 没有 ] 选项。

有没有办法提示用户并检查他是否真的要卸载任何以前的版本?

4

2 回答 2

2

Windows Installer 升级表有一个名为 msidbUpgradeAttributesOnlyDetect 的属性位,由 WiX 的 UpgradeVersion@OnlyDetect 属性表示。

如果正确创作,这会导致 FindRelatedProducts 使用检测到的产品的 ProductCode GUID 设置您选择的操作属性。它不会将此传递给 RemoveExistingProducts 以进行自动删除。

虽然不是典型的行为,但没有什么能阻止您编写一些在此属性具有值时触发的 UI。您可以询问用户是否要删除旧版本,如果是,请设置另一个操作属性来告诉 RemoveExistingProducts。(提示:编写一个升级,它永远不会自己找到产品并劫持它的属性来注入删除。)

如果用户拒绝,您可以选择中止安装或继续并排安装到不同的目录结构。(办公室、Visual Studio 等)。

于 2013-07-31T19:10:57.550 回答
2

我发现这篇文章在解决同样的问题时很有用。您可以使用您在升级标签中设置的PREVIOUSVERSIONINSTALLED属性打开自定义对话框。通过添加以下代码在一些 UI 标记中执行此操作(使用标准欢迎对话框时):

<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>

我基于这个 Wix 教程建立了我自己的自定义对话框,最后得到了以下代码:

 <Dialog Id="OldVersionDlg" Width="260" Height="85" Title="[ProductName] Setup" NoMinimize="yes">
        <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17"
          Default="yes" Cancel="yes" Text="No">
          <Publish Event="EndDialog" Value="Exit">1</Publish>
        </Control>
        <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="Yes">
          <Publish Event="EndDialog" Value="Return">1</Publish>
        </Control>
        <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
          <Text>A previous version of [ProductName] is currently installed. By continuing the installation this version will be uninstalled. Do you want to continue?</Text>
        </Control>
</Dialog>
于 2015-10-09T11:08:56.657 回答