我正在使用WiX工具创建安装程序。
我需要使安装程序能够选择是否在创建开始菜单和桌面快捷方式时加入选项。
类似这样:[ ] 您是否要创建一个开始菜单快捷方式?
这种操作可行吗?
我正在使用WiX工具创建安装程序。
我需要使安装程序能够选择是否在创建开始菜单和桌面快捷方式时加入选项。
类似这样:[ ] 您是否要创建一个开始菜单快捷方式?
这种操作可行吗?
是的,这绝对是可能的。总体思路是将快捷方式组件设置为基于某一属性的条件语句,然后自定义你的UI界面来将复选框与该属性连接起来。
所有这些都在Wix教程中有描述(虽然不是针对您的具体示例),这是一个有启发性的阅读。但以下是适用于您情况的更具体的代码示例:
创建一个属性,您可以将复选框与其连接起来。在您的.wxs文件中,添加一个Property
来存储该值。
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product ...>
<Property Id="INSTALLSHORTCUT" />
</Product>
</Wix>
为安装快捷方式的组件添加一个Condition
,使其在新INSTALLSHORTCUT
属性的值的条件下可用。
<Component Id="ProgramFilesShortcut" Guid="*">
<Condition>INSTALLSHORTCUT</Condition>
<Shortcut Id="ProductShortcut" ... />
</Component>
您需要自定义对话框以向UI添加复选框,并将其连接到INSTALLSHORTCUT
属性。我不会在这里详细介绍所有细节,但是这里有一个很好的教程:用户界面回顾
您需要下载Wix源代码树以获取您正在使用的UI的.wxs文件。例如,要将复选框添加到WixUI_InstallDir
UI中的InstallDir
对话框中,您需要下载WixUI_InstallDir.wxs
和InstallDirDlg.wxs
。将它们添加到您的Wix项目并重命名它们(例如,Custom_InstallDir.wxs
和Custom_InstallDirDlg.wxs
)。
编辑Custom_InstallDirDlg.wxs
来添加您的复选框。也给<Dialog>
一个新的Id
:
<Wix ...>
<Fragment>
<UI>
<Dialog Id="InstallDirAndOptionalShortcutDlg" ...>
<Control Id="InstallShortcutCheckbox" Type="CheckBox"
X="20" Y="140" Width="200" Height="17"
Property="INSTALLSHORTCUT" CheckBoxValue="1"
Text="Do you want to create a start menu shortcut?" />
</Dialog>
</UI>
</Fragment>
</Wix>
编辑 Custom_InstallDir.wxs
文件,以使用自定义的 InstallDirAndOptionalShortcut
对话框:
<Wix ...>
<Fragment>
<UI Id="Custom_InstallDir">
** Search & Replace all "InstallDirDlg" with "InstallDirAndOptionalShortcut" **
</UI>
</Fragment>
</Wix>
最后,在你的主 .wxs 文件中引用你自定义的 UI:
<Wix ...>
...
<UIRef Id="Custom_InstallDir" />
...
</Wix>
在复选框单击事件或下一个按钮单击事件中,您可以调用自定义操作来创建快捷方式。
<Component>
中添加一个Directory
属性,例如<Component ... Directory="APPLICATIONDIR">
(2)<ShortCut>
需要这些属性:<Shortcut ... Advertise="no" Target="[#MyApp.exe]" />
(注意:它是“Target”中的文件ID)(3)向组件添加一个虚拟注册表项,例如<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="desktop icon = 1" KeyPath="yes" />
以避免WiX错误。 (4)请参见Felix的评论。 - Beauty