首页 > 解决方案 > WIX 更新程序不使用以前版本的设置参数

问题描述

我有 wix 项目安装程序。我想使用我的产品的更新新版本。它工作正常,但仍然显示所有对话框,我需要输入参数。(如安装路径、用户凭据等)。如何跳过所有对话框并使用旧(prev)安装程序版本中的所有这些参数。

<Product Id="*" Name="$(var.ProductName) $(var.ProductVersion)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
<Package InstallerVersion="301" Compressed="yes" InstallScope="perMachine" Platform="x64" />

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." AllowSameVersionUpgrades="yes" />
<MediaTemplate EmbedCab="yes" />

<Feature Id="ProductFeature" Title="COMPANY.Product.Installers.Server" Level="1">
  <ComponentGroupRef Id="ProductComponents" />
  <ComponentGroupRef Id="ServerInstallerFiles" />
</Feature>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" ></Property>
<UIRef Id="WixUI_MinimalCustom"/>
<InstallExecuteSequence>
  <Custom Action="DoAfterInstallJobParams" Before="DoAfterInstallJob">Not Installed or REINSTALL</Custom>
  <Custom Action="DoAfterInstallJob" After="InstallFiles">Not Installed or REINSTALL</Custom>
  <Custom Action="DoBeforeUnstallJob" After="InstallInitialize">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
</Product>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFiles64Folder">
    <Directory Id="INSTALLFOLDER" Name="COMPANY" />
  </Directory>
</Directory>
</Fragment>

<Fragment>
<Property Id="DoBeforeUninstallJob" Value="[INSTALLFOLDER]" />
<Binary Id="CustomActionBinary" SourceFile="$(var.SolutionDir)Output\Installers\Actions\COMPANY.Product.Installers.Server.Actions.CA.dll" />
<CustomAction Id="DoAfterInstallJob" BinaryKey="CustomActionBinary" DllEntry="AfterInstall" Execute="deferred" Return="check" Impersonate="no" />
<CustomAction Id="DoAfterInstallJobParams" Property="DoAfterInstallJob" Value="HOSTING_URL=[HOSTING_URL];DB_CONNECTION=[DB_CONNECTION];INSTALLPATH=[INSTALLFOLDER];LOGIN=[LOGIN];PASSWORD=[PASSWORD]" />
<CustomAction Id="DoBeforeUnstallJob" BinaryKey="CustomActionBinary" DllEntry="BeforeUninstall" Execute="deferred" Return="check" Impersonate="no" />
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  <ComponentRef Id="cmpServerHost"/>
</ComponentGroup>
</Fragment>

<Fragment>
<DirectoryRef Id="INSTALLFOLDER">
  <Directory Id="ServerHost" Name="ServerHost">
    <Component Win64="yes" Id="cmpServerHost" Guid="a4a81104-1e30-463d-87e1-e8a79b4c6829">
      <File Id="ServerLog4netConfig" Source="$(var.SolutionDir)..\Logging\log4net.config" />
      <RegistryValue Root="HKLM" Key="Software\[Manufacturer]\$(var.ProductName)" Type="string" Value="[INSTALLFOLDER]" KeyPath="yes" Name="COMPANYInstallPath"/>
      <File Id="AppVersion" Source="$(var.SolutionDir)Output\Installers\Actions\COMPANY.Product.Installers.Server.Actions.CA.dll" />
    </Component>
  </Directory>
</DirectoryRef>
</Fragment>

标签: wixwindows-installer

解决方案


记住属性持久属性允许您从第一个版本读回设置。

对话框控制和顺序:为了跳过对话框,您需要检测是否正在进行重大升级,如果您使用重大升级(您基于该源文件执行),然后使用条件和属性值相应地控制对话框流. 这需要相当多的工作和测试。如果可以的话,我会避免它。

简易模式:仅禁用(写保护)或隐藏包含在第一次设置中写入的设置的对话框字段可能更可取(而不是更改对话框顺序)。您可以将条件和条件用于这两个目的。


维护 GUI:对于较小的升级,修复和卸载对话框集将与原始安装不同。你会得到一个"maintenance dialog set"呈现而不是"installation dialog set".

主要升级:当您通过 Windows Installer 的major upgrade mechanism. 由于这在技术上是如何工作的,您也可以获得新版本的安装对话框集。这是因为从技术上讲,它是该新产品代码的全新安装。旧版本作为该过程的一部分被卸载的事实并不重要。您不是在安装新的次要版本,而是在有效地卸载和重新安装。

WIX_UPGRADE_DETECTED:在标准 WiX 包中设置了一个属性。它是WIX_UPGRADE_DETECTED。它可用于检测何时发生重大升级,因此可用于调整重大升级安装的对话顺序。以下是有关此属性的更多详细信息,以及UPGRADINGPRODUCTCODE- 的描述,这是在正在卸载的安装程序中设置的另一个属性(不是在正在安装的新安装程序中)。

没时间了。坚持这一点,以后会更新。


一些链接


推荐阅读