Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX正确创建桌面快捷方式_Wix_Installation_Windows Installer_Desktop Shortcut - Fatal编程技术网

WiX正确创建桌面快捷方式

WiX正确创建桌面快捷方式,wix,installation,windows-installer,desktop-shortcut,Wix,Installation,Windows Installer,Desktop Shortcut,有两个答案 这两个答案都缺乏对正在发生的事情的真正解释。这两种创建快捷方式的方法有什么区别?第一种方法与文档一致 第二个方法有一个MergeRedirectFolder,我似乎找不到任何文档,我不明白为什么第二个示例不需要注册表设置,因为根据WiX文档,注册表设置: 是必需的,因为在为当前用户安装非播发快捷方式时,快捷方式不能用作组件的键路径 这是否意味着第二种方法是宣传的快捷方式?或者这是一个假设用户在每台机器上安装的答案?还是我迷失在沙司里了?(很有可能——第二天尝试使用WiX,因为微软强迫

有两个答案

这两个答案都缺乏对正在发生的事情的真正解释。这两种创建快捷方式的方法有什么区别?第一种方法与文档一致

第二个方法有一个
MergeRedirectFolder
,我似乎找不到任何文档,我不明白为什么第二个示例不需要注册表设置,因为根据WiX文档,注册表设置:

是必需的,因为在为当前用户安装非播发快捷方式时,快捷方式不能用作组件的键路径

这是否意味着第二种方法是宣传的快捷方式?或者这是一个假设用户在每台机器上安装的答案?还是我迷失在沙司里了?(很有可能——第二天尝试使用WiX,因为微软强迫我走这条路。)

第一个:

<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">
      </Directory>
    </Directory>
  </Directory>

第二条:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="DesktopFolder" SourceName="Desktop" />
  <Directory Id="MergeRedirectFolder">
    <Component Id="MyExeComponent" Guid="*">
      <File Id="MyExeFile" Source="$(var.ExeSourcePath)" KeyPath="yes">
        <Shortcut
          Id="DesktopShortcut"
          Directory="DesktopFolder"
          Name="$(var.ShortcutName)"
          WorkingDirectory="MergeRedirectFolder" />
      </File>
    </Component>
  </Directory>
</Directory>

警告:每个文档的注释,因为两个示例都没有指定
播发
属性,所以都不应该创建播发的快捷方式。我不记得是什么让我把答案写在下面;这似乎是不正确的。我会巧妙地留下答案,以防背后有微妙的真相


第一个示例创建广告快捷方式;第二种方法创建一个非广告快捷方式。这两种快捷方式的规则在Target列中描述


非广告快捷方式是一种标准的Windows快捷方式,类似于使用Windows资源管理器创建的快捷方式。广告快捷方式通过验证激活快捷方式时功能中的所有组件都已安装来增强恢复能力。

WiX文档建议第一种方法。我不知道第二次是否打折。@PeterRitchie这是我在问题中发布的链接。但是,是的,我同意文件中建议的第一种方法。与您的第二个声明的要点相同。我相信文档而不是我在stackoverflow上读到的内容。实际上,我刚刚通过文档完成了设置,但我仍然想知道第二个文档中发生了什么。也许对未来也有帮助。我写过这篇文章,但我不确定它读起来有多好。也许您可以快速浏览一下:第一个示例不是广告快捷方式,因为它需要
广告
属性。除此之外,我还没有深入探讨这些差异,而是继续使用了第一个示例。广告中的快捷方式指向MSI功能,触发它将导致该功能中的所有关键路径及其所有父功能得到验证。如果发现任何关键路径存在问题,则会触发受影响功能的自修复,并(重新)安装缺失的组件。此验证检查有时用于在每个Windows用户启动其应用程序时添加每个用户的数据(userdata或HKCU数据)。