使用 WiX Toolset 时,快捷方式未添加到开始菜单

问题描述 投票:0回答:3

我正在使用 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。

有人能发现问题所在吗?谢谢!

.net wix windows-installer
3个回答
0
投票

我没有立即发现任何问题,但我在部署道场 - 第 24 集中逐步介绍了这个主题。我不知道如何总结 StackOverflow 的整个视频,但它在那一集中有效,所以它应该适合你。


0
投票

您可能可以简单地简化上面的代码。您还会提示删除不必要的快捷方式,因为 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" 将自动传递给快捷方式组件。


0
投票

这对我有用 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>
© www.soinside.com 2019 - 2024. All rights reserved.