WiX Burn:从注册表中读取 LaunchTarget
Posted
技术标签:
【中文标题】WiX Burn:从注册表中读取 LaunchTarget【英文标题】:WiX Burn: Reading LaunchTarget from Registry 【发布时间】:2014-11-11 21:37:47 【问题描述】:我是 WiX 的新手,我正在尝试让我的 Bootstrapper 在完成后启动我已安装的应用程序。为此,我正在使用
<Variable Name="LaunchTarget" Value="path_to_exe"/>
但是,我要获得可执行文件的路径并不容易。这样做的原因是因为我使用
为此,msi 将路径写入注册表中的已知位置,然后引导程序读取并使用它。
问题是引导程序读取注册表时,msi还没有运行,所以最后无法运行可执行文件。
这是我的 WiX,如果有帮助的话:
<?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">
<Bundle Name="My Installation" UpgradeCode="a8964402-f3fc-4878-aafd-31ecda6b685e" Version="1.0.0.0">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
ThemeFile="theme.xml"
SuppressOptionsUI="yes" />
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="NetFx40Redist"/>
<ExePackage Id="OpenSSL" SourceFile="pre-requesite.exe" />
<MsiPackage Id="myInstall" SourceFile="mySetup.msi" />
</Chain>
<util:RegistrySearch Root="HKLM"
Key="Software\myProgram"
Value="myEXEPath"
Variable="myEXEPath"
Result="value"
Format="raw" />
<Variable Name="LaunchTarget" Value="[myEXEPath]"/>
</Bundle>
</Wix>
所以,简而言之,我正在尝试让 RegistrySearch 在 MsiPackage 安装之后运行。这可以做到吗?如果没有,我有什么选择?
顺便说一句,如果我在安装前手动填写注册表值,一切正常。这意味着除了事情运行的顺序之外,一切都运行良好。
【问题讨论】:
【参考方案1】:RegistrySearches 在检测操作期间运行。自定义 BA 可以在 Apply 之后运行 Detect,但这并不是一个真正的选择,因为您使用的是 WixStandardBootstrapperApplication。
幸运的是,WiX v3.9 添加了对运行已提升的 LaunchTarget 的支持,要求目标 .exe 的路径位于 HKLM 下的注册表中。所以你会这样做:
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
ThemeFile="theme.xml"
SuppressOptionsUI="yes"
LaunchTargetElevatedId="MyAEEId" />
</BootstrapperApplicationRef>
<ApprovedExeForElevation Id="MyAEEId"
Key="Software\myProgram" Value="myEXEPath" />
编辑:
您似乎还需要设置LaunchTarget
。为什么你的捆绑包不知道它会在哪里?你可以只为LaunchTarget
输入乱码(WixStdBA 将首先尝试注册表位置),但你不能使用built-in variables 和/或MsiProperty
元素来定位exe吗?
【讨论】:
哇,我非常幸运,因为它刚刚在 12 天前发布!我升级了 WiX 并添加了两个 Elevation 东西,效果很好。非常感谢你!!!为了回答您的问题,引导程序没有路径,因为它是由 mySetup.msi 决定的。我在 msi 中设置了一个默认值,我可以将它硬编码到引导程序中,但是如果用户更改了路径,那么它将无法工作。以上是关于WiX Burn:从注册表中读取 LaunchTarget的主要内容,如果未能解决你的问题,请参考以下文章
WiX Burn - 根据条件设置 InstallFolder 变量