【发布时间】:2017-11-30 14:33:16
【问题描述】:
这是我的情况。
我需要将 Erlang、RabbitMQ 和我的 Msi 包 的安装文件整合到一个 Wix Bundle 中。我目前正在使用一个 Bootstrapper 项目来帮助我做到这一点,但我仍在努力检查如何在我的本地机器中检查 Erlang 和 RabbitMQ 的可用性。据我所知,有3个选项:
使用 RememberProperty 模式进行 RegistrySearch: 这似乎是不可能的,因为在卸载 Erlang 之后,reg 键仍然存在。
使用 CustomAction 通过 cmd 行运行检查。这个不太可能因为Window Installer does not support return value from CustomAction.
执行目录和文件搜索。我们无法假设用户在本地机器上安装文件的位置,所以这个也不太可能。
我错过了什么?我在其他地方做错了吗?你能帮我解决这个问题吗?如何使用 Wix 验证 RabbitMQ 和 Erlang 的存在?
下面是我的代码:
Bundle.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<?define BundleName = "My Bundle name" ?>
<?define BundleVersion = "1.0.0.0" ?>
<?define BundleFullVersion = "1.0.0.0" ?>
<?define BundleManufacturer = "My Company" ?>
<?define BundleUpgradeCode = "My Upgrage code" ?>
<Bundle Name="$(var.BundleName)"
Version="$(var.BundleVersion)"
Manufacturer="$(var.BundleManufacturer)"
UpgradeCode="$(var.BundleUpgradeCode)">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
<bal:WixStandardBootstrapperApplication
SuppressOptionsUI="yes"
LicenseUrl=""
LogoFile=".\resources\images\my_logo.png"/>
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="ExePackages"/>
<PackageGroupRef Id="MsiPackages"/>
</Chain>
</Bundle>
</Wix>
ExePackages.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment>
<util:RegistrySearch
Root="HKLM"
Key="SOFTWARE\Ericsson\Erlang\ErlSrv\1.1\RabbitMQ"
Format="raw"
Variable="RabbitMQRegistrySearch"
Win64="yes"
Result="exists"/>
<util:RegistrySearch
Root="HKLM"
Key="SOFTWARE\Ericsson\Erlang\ErlSrv\1.1"
Format="raw"
Variable="ErlangRegistrySearch"
Win64="yes"
Result="exists"/>
<PackageGroup Id="ExePackages">
<ExePackage Id="Erlang"
DisplayName="Erlang"
Compressed="yes"
Permanent="yes"
Cache="yes"
PerMachine="yes"
Vital="yes"
DetectCondition="ErlangRegistrySearch"
SourceFile=".\Prerequisites\otp_win64_20.0.exe"/>
<ExePackage Id="RabbitMQ"
DisplayName="RabbitMQ"
Compressed="yes"
Permanent="yes"
Cache="yes"
PerMachine="yes"
Vital="yes"
DetectCondition="RabbitMQRegistrySearch"
SourceFile=".\Prerequisites\rabbitmq-server-3.6.5.exe"/>
</PackageGroup>
</Fragment>
</Wix>
【问题讨论】: