wix - 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>
解决方案
记住属性:持久属性允许您从第一个版本读回设置。
对话框控制和顺序:为了跳过对话框,您需要检测是否正在进行重大升级,如果您使用重大升级(您基于该源文件执行),然后使用条件和属性值相应地控制对话框流. 这需要相当多的工作和测试。如果可以的话,我会避免它。
简易模式:仅禁用(写保护)或隐藏包含在第一次设置中写入的设置的对话框字段可能更可取(而不是更改对话框顺序)。您可以将条件和条件用于这两个目的。
维护 GUI:对于较小的升级,修复和卸载对话框集将与原始安装不同。你会得到一个"maintenance dialog set"
呈现而不是"installation dialog set"
.
主要升级:当您通过 Windows Installer 的major upgrade mechanism
. 由于这在技术上是如何工作的,您也可以获得新版本的安装对话框集。这是因为从技术上讲,它是该新产品代码的全新安装。旧版本作为该过程的一部分被卸载的事实并不重要。您不是在安装新的次要版本,而是在有效地卸载和重新安装。
WIX_UPGRADE_DETECTED:在标准 WiX 包中设置了一个属性。它是WIX_UPGRADE_DETECTED
。它可用于检测何时发生重大升级,因此可用于调整重大升级安装的对话顺序。以下是有关此属性的更多详细信息,以及UPGRADINGPRODUCTCODE
- 的描述,这是在正在卸载的安装程序中设置的另一个属性(不是在正在安装的新安装程序中)。
- 这是更改 WiX GUI 的不同方法的快速列表。
- Wix,存在旧版本时的自定义对话框(存在旧版本时自定义对话框)。
没时间了。坚持这一点,以后会更新。
一些链接:
推荐阅读
- javascript - 如何成功地从 HTML 的输入中提取值并在 JavaScript 中使用它们?
- javascript - Chartjs在负值时反转条添加IndexLabaels
- mapping - NCL 绘制没有环绕框的地图
- python - 使用python elementree xml解析器和循环的宁静分页
- javascript - 每次生产 Kafka 消息时都需要连接吗?
- blazor-server-side - 如何从“无法重新连接到服务器。重新加载页面以恢复功能”中使用 Blazor Web 应用程序以编程方式恢复或重新启动。
- asp.net - Net core 3.1 Google authentication GetExternalLoginInfoAsync 由于某些浏览器中的空cookie而返回null
- c++ - 这个函数中 std::bad_alloc 的原因是什么?
- r - 当闪亮的应用程序通过单击按钮运行时如何运行 R 脚本?
- android - 如何从 Firebase 实时数据库中读取数据?