【问题标题】:Method to set shortcuts to network drives using WiX Burn使用 WiX Burn 设置网络驱动器快捷方式的方法
【发布时间】:2013-06-06 20:46:22
【问题描述】:
我正在为一个分为两部分的应用程序创建安装程序。第一部分是安装在服务器上的MSI 文件。它包括所有产品可执行文件和数据文件以及客户端应用程序的安装程序。这是使用WiX (v3.7) 轻松创建的。客户端安装程序(从网络工作站运行)只需在工作站上安装必备组件,然后在网络驱动器上创建应用程序的快捷方式。我使用Burn 创建客户端安装程序,但无法创建快捷方式。
我的问题是我不知道如何让客户端安装程序 (MSI) 了解应用程序所在的网络目录。它是引导程序所在的目录,但包含的客户端安装程序不会从该目录运行。
我如何获得这个目录,或者是否有更好的方法来处理整个安装顺序?
【问题讨论】:
标签:
wix
windows-installer
burn
【解决方案1】:
使用自定义引导程序应用程序 DLL (BA),您可以通过获取进程入口模块的路径来设置刻录变量。然后在您的 Bundle 中,定义 burn 变量,并将其作为属性传递给 Windows Installer 包。在您的设置项目中使用该属性。
要设置自定义 BA 项目,创建 .NET 项目要容易得多 [tutorial]。
<Variable
Name="BootstrapperDirectory"
Persisted="yes"
Type="string"
bal:Overridable="yes"
Value='BootstrapperDirectory not set. Try passing it on the
command line like "BootstrapperDirectory=%cd%"
or writing a custom BA to set it programmatically.
It must also be declared with bal:Overridable="yes".' />
<Chain>
<MsiPackage SourceFile="$(var.SetupProject1.TargetPath)" DisplayInternalUI="yes">
<MsiProperty Name="BOOTSTRAPPERDIR" Value="[BootstrapperDirectory]" />
</MsiPackage>
</Chain>
【解决方案2】:
您可以从 the built-in Burn Variable WixBundleOriginalSource 获取目录,然后按照 Tom 的建议使用 MsiProperty 元素将其传递到您的 MSI。
这为您提供了安装可执行文件的完整路径。从那里,您可以使用自定义操作来提取您需要的路径部分,并设置一个 Msi 属性供您的快捷方式使用。