2012-08-08 127 views
47

因此,我在Wix中安装了此项目,并希望在桌面上拥有快捷方式。 这一定很容易,你可能会想。但事实并非如此。 在因特网上找到的所有代码片段都不起作用。 经过几个小时的努力和阅读文档,我终于明白了,所以我在这里与你分享。使用WiX创建桌面快捷方式

+0

这是我觉得有这么多的微软的“技术”这几天的方式。这个评论差不多三年后。所以显然,现有技术水平没有得到改善。 – 2018-01-21 05:59:52

回答

61

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

<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> 
+0

您的注册表项上需要反斜杠 – 2013-05-14 19:36:21

+7

请勿发布硬编码的GUID。把'Guid =“*”'改为自动生成GUID,或者使用{PUT-GUID-HERE} – 2014-08-10 19:13:55

+1

注册表值是什么? – BatteryBackupUnit 2015-06-17 11:59:37

26

我认为我的方式比较容易,没必要为你创建一个注册表项:

<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> 
+1

从[documentation](http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_start_menu_shortcut.html)注册表项:_“这是必需的,因为当为当前用户安装非通告的快捷方式时,快捷方式不能充当组件的KeyPath。”_ – blins 2017-08-04 16:33:32

+0

文件组件本身是关键路径,快捷方式“继承”文件属性。这种方式可能有点令人困惑,虽然当您尝试追踪许多文件中的桌面快捷方式时..用户对于紧凑性和可追溯性的偏好我认为? – 2018-01-02 13:55:36

13

感谢例子。在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> 

而且在产品定义文件中提到桌面文件夹:

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

     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="FARMS" > 
     </Directory> 
     </Directory> 
    </Directory> 
    </Fragment> 
1

似乎在这个documentation轻松了许多。

首先,你必须指向你的DesktopFolder,

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

那么你应该要创建的快捷方式文件创建快捷方式组件。

<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> 

它为我工作。我需要把图标,但这很容易的一部分。希望它有效。

2

太多精力后,我用这样的方式:

<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> 
相关问题