使用WiX创建桌面快捷方式

Ray*_*boe 61 installer windows-installer wix shortcut

所以我在Wix中有这个安装项目,并希望在桌面上有一个快捷方式.这可能很容易让你想到.但事实并非如此.在因特网上找到的所有代码片段都不起作用.经过几个小时的挣扎和阅读文档后,我终于做对了,所以我在这里与大家分享.

Ray*_*boe 78

快捷方式是非广告的,希望这有助于某人.请记住将组件放入功能标记中.

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="DesktopFolder" Name="Desktop">
        <Component Id="ApplicationShortcutDesktop" Guid="*">
            <Shortcut Id="ApplicationDesktopShortcut"
                Name="Text under your icon"
                Description="Comment field in your shortcut"
                Target="[MYAPPDIRPROPERTY]MyApp.exe"
                WorkingDirectory="MYAPPDIRPROPERTY"/>
            <RemoveFolder Id="DesktopFolder" On="uninstall"/>
            <RegistryValue
                Root="HKCU"
                Key="Software/MyAppName"
                Name="installed"
                Type="integer"
                Value="1"
                KeyPath="yes"/>
        </Component>
    </Directory>

    <Directory Id="ProgramFilesFolder" Name="PFiles">
        <Directory Id="MyCompany" Name="MyCompany">
            <Directory Id="MYAPPDIRPROPERTY" Name="MyAppName">
                <!-- main installation files -->
            </Directory>
        </Directory>
    </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 不要发布硬编码的GUID.把'Guid ="*"`代替自动生成guid,或者使用{PUT-GUID-HERE} (10认同)
  • 什么是注册表值? (4认同)
  • 最好将Target属性的文件ID替换为"[MYAPPDIRPROPERTY] MyApp.exe". (3认同)
  • 我必须在功能标记下添加它:<ComponentRef Id ="ApplicationShortcutDesktop"/> (3认同)
  • @BatteryBackupUnit 快捷方式不能是组件的关键路径,因此注册表值可用于此目的。WiX 文档中使用了相同的技术:http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_start_menu_shortcut.html (2认同)

Sea*_*all 29

我认为我的方式更容易,您无需创建注册表项:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="DesktopFolder" SourceName="Desktop" />
  <Directory Id="MergeRedirectFolder">
    <Component Id="MyExeComponent" Guid="{PUT-GUID-HERE}">
      <File Id="MyExeFile" Source="$(var.ExeSourcePath)" KeyPath="yes">
        <Shortcut
          Id="DesktopShortcut"
          Directory="DesktopFolder"
          Name="$(var.ShortcutName)"
          WorkingDirectory="MergeRedirectFolder" />
      </File>
    </Component>
  </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 来自 [documentation](http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_start_menu_shortcut.html) 关于注册表项:_"这是必需的,因为安装时快捷方式不能作为组件的 KeyPath当前用户的非广告快捷方式。”_ (2认同)

Dim*_*try 15

谢谢你举个例子.在WIX 3.8中,它仍然引发:"错误3 ICE43:组件...具有未公布的快捷方式.它应该使用HKCU下的注册表项作为其KeyPath,而不是文件."

所以我在具有以下功能的文件中这样做:

   <Component Id="cmp79F6D61F01DD1060F418A05609A6DA70" 
              Directory="dirBin" Guid="*">
      <File Id="fil34B100315EFE9D878B5C2227CD1454E1" KeyPath="yes"
            Source="$(var.SourceDir)\FARMS.exe" >
        <Shortcut Id="DesktopShortcut"
                  Directory="DesktopFolder"
                  Name="FARMS $(var.FarmsVersion)"
                  Description="Local Land Services desktop application"
                  WorkingDirectory="INSTALLFOLDER"
                  Icon="FARMS.exe"
                  IconIndex="0"
                  Advertise="yes" >
           <Icon Id="FARMS.exe" SourceFile="$(var.SourceDir)\FARMS.exe" />
        </Shortcut>
        </File>
    </Component>
Run Code Online (Sandbox Code Playgroud)

并在包含产品定义的文件中提到了桌面文件夹:

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="DesktopFolder" Name="Desktop" />

      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="FARMS" >
        </Directory>
      </Directory>
    </Directory>
  </Fragment>
Run Code Online (Sandbox Code Playgroud)


小智 6

在本文档中似乎容易得多

首先,您必须指向DesktopFolder,

   <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="DesktopFolder" Name="Desktop"/>
Run Code Online (Sandbox Code Playgroud)

然后,您应该为要为其创建快捷方式的文件创建快捷方式组件。

  <Component Id="PutYourComponentIdHere" Directory="FileDirectory" Guid="*">
    <File Id="NotYourComponentId" KeyPath="yes" Source="..\YourFileSource\YourExecutable.exe">
      <Shortcut Id="desktopServer" Directory="DesktopFolder" Name="YourShourtcutName" WorkingDirectory='WhereShouldYourShortcutPoint' Advertise="yes"/>
    </File>
  </Component>
Run Code Online (Sandbox Code Playgroud)

它为我工作。我需要放置图标,但这很容易。希望它能工作。


Moh*_*sen 6

经过一番努力,我用了这样的方法:

<Product ...>
    <Feature Id="ProductFeature" Title="SetupProject" Level="1">
      ...
      ...
      <ComponentRef Id="cmpDesktopShortcut" />
    </Feature>

    <Component Id="cmpDesktopShortcut" Guid="PUT-GUID-HERE" Directory="DesktopFolder" >
        <Shortcut Id="MyDesktopShortcut" 
                  Name="Setup Project" 
                  Description="Opens the program." 
                  Directory="DesktopFolder" 
                  Target="[INSTALLFOLDER]App.exe"
                  WorkingDirectory="INSTALLFOLDER"/>
        <RegistryValue Root="HKCU" Key="Software\My Company\Sample Application" Name="installed" Type="integer" Value="1" KeyPath="yes" />
    </Component>
</Product>
Run Code Online (Sandbox Code Playgroud)