我正在使用 WiX 工具集构建自定义 .msi 文件。
我想在“开始”菜单文件夹和桌面上为我的应用程序创建快捷方式。我目前有以下 XML 代码:
<StandardDirectory Id="DesktopFolder">
<Component
Id="ApplicationShortcutDesktop"
Guid="{*}">
<Shortcut Id="ApplicationDesktopShortcut"
Name="App"
Description="AppDescription"
Target="[INSTALLFOLDER]App.exe"
WorkingDirectory="INSTALLFOLDER"/>
<RemoveFolder Id="DesktopFolder" On="uninstall"/>
<RegistryValue
Root="HKCU"
Key="Software\Company\App"
Name="installed"
Type="integer"
Value="1"
KeyPath="yes"/>
</Component>
</StandardDirectory>
<StandardDirectory Id="ProgramMenuFolder">
<Component Id="ApplicationShortcutStartMenu" Guid="{*}">
<Shortcut Id="ApplicationShortcutStartMenu"
Name="App"
Description="AppDescription"
Target="[INSTALLFOLDER]App.exe"
WorkingDirectory="INSTALLFOLDER"/>
<RemoveFolder Id="ProgramMenuFolder" On="uninstall"/>
<RegistryValue
Root="HKCU"
Key="Software\Company\App"
Name="installed"
Type="integer"
Value="1"
KeyPath="yes"/>
</Component>
</StandardDirectory>
我正在引用
<Feature>
元素中的快捷方式,如下所示:
<Feature Id="Main">
<ComponentGroupRef Id="ProjectOutputFiles"/>
<ComponentRef Id="ApplicationShortcutDesktop"/>
<ComponentRef Id="ApplicationShortcutStartMenu"/>
</Feature>
它适用于桌面快捷方式,但不适用于开始菜单快捷方式。也许还应该指出的是,其他一切都工作正常,即 .exe 文件正在按其应有的方式运行等。
我正在使用 WiX v4。
有人能发现问题所在吗?谢谢!
我没有立即发现任何问题,但我在部署道场 - 第 24 集中逐步介绍了这个主题。我不知道如何总结 StackOverflow 的整个视频,但它在那一集中有效,所以它应该适合你。
您可能可以简单地简化上面的代码。您还会提示删除不必要的快捷方式,因为 WIX 会在卸载时自动为您处理此问题。
您可以单独声明您的 StandardDirectory,如下所示。您也可以在此处声明 INSTALLFOLDER 变量。
<StandardDirectory Id="ProgramFiles6432Folder">
<!-- Create a folder within the parent folder given the name -->
<Directory Id="INSTALLFOLDER" Name="!(bind.Property.Manufacturer)\!(bind.Property.ProductName)" />
</StandardDirectory>
然后在一个单独的片段中声明您的应用程序及其快捷方式,如下所示
<Fragment>
<ComponentGroup Id="MyAppInstall" Directory="INSTALLFOLDER">
<Component Id="AppExecutable" Bitness="always64">
<File Id="AppExecutable" Source="MyApp.exe"/>
<Shortcut Name="My App Name" Directory="ProgramMenuFolder" Advertise="yes" Icon="MyApp.exe"/>
<Shortcut Name="My App Name" Directory="DesktopFolder" Advertise="yes" Icon="MyApp.exe"/>
</Component>
</ComponentGroup>
声明 Directory="INSTALLFOLDER" 将自动传递给快捷方式组件。
这对我有用 Wix v5
<Icon Id="App.ico" SourceFile="$(var.TargetDir)App.ico" />
<Fragment>
<ComponentGroup Id="AppShortCutsAndRegistry" Directory="INSTALLFOLDER">
<Component Id="AddProgramMenuFolder" Bitness="always64" Guid="89F902EE-53F0-42D4-83A2-AF4AFC119226" Directory="ProgramMenuFolder">
<Shortcut Name="$(var.Name)" Directory="ProgramMenuFolder" Icon="App.ico"/>
</Component>
<Component Id="AddDesktopFolder" Bitness="always64" Guid="89F902FF-53F0-42D4-83A2-AF4AFC119226" Directory="DesktopFolder">
<Shortcut Name="$(var.Name)" Directory="DesktopFolder" Icon="App.ico"/>
</Component>
</ComponentGroup>
</Fragment>