6

我需要使用 Wix 为现有文件夹(而不是文件)创建桌面快捷方式。更详细地说,我的安装程序有一个使用 C# 编写的 CustomAction 程序与之关联。此 CustomAction 程序创建一个名为“BSS”的文件夹,其路径由用户选择。

C:\ProgramData\MT\BSS

现在我需要使用 WiX 为这个文件夹放置一个桌面快捷方式。但是,我遇到了一个问题,因为这个文件夹在 WiX 中没有文件夹结构。我能找到的最接近的代码如下。

<Directory Id="DesktopFolder" Name="Desktop"/>
  <Directory Id="CommonAppDataFolder" Name="ProgramDataFolder"/>
  <Component Id="ComponentBSStrageShortcut" Guid="{8436995c-2e76-4030-b92d-c6b4bc243c43}">
    <Shortcut Id="ShortcutBSStrageShortcut"
              Directory="DesktopFolder"
              WorkingDirectory="APPLICATIONFOLDER"
              Target="[CommonAppDataFolder]/MTK/BSStrage"
              Name="BSStrage"
              Show="normal"/>
    <RegistryValue Action="write"
                   Key="SOFTWARE/MTK/BackStreet"
                   Root="HKCU"
                   Type="string"
                   KeyPath="yes"
                   Value="ApplicationFolderName"/>
  </Component>

当我以这种方式构建安装程序时,它实际上会在桌面上创建一个快捷方式。然而,WiX 似乎认为 BSStrage 是一个文件/应用程序,因此它在 C:\ProgramData\MT 位置放置了一个名为 BSStrage 的虚构应用程序的快捷方式。但是双击它并没有帮助,因为没有可以用来打开它的程序。

显然我在这里做错了。有人可以帮我解决这个问题,以便如何克服这个问题。请注意,我对 Wix 非常陌生(才两天),以前从未使用过它。任何代码示例都会有很大帮助。

4

3 回答 3

3

我刚刚遇到了同样的问题;似乎创建具有表单属性的Shortcut标签工作正常,但尝试附加子目录,例如导致创建不起作用的快捷方式。Target
Target="[CommonAppDataFolder]"
Target="[CommonAppDataFolder]\MTK\BSStrage"

幸运的是,我找到了解决方案。诀窍是创建一个Directory标签层次结构,指向您要创建快捷方式的目录,然后该目录包含一个包含Component标签的Shortcut标签,如下所示:

<Directory Id="DesktopFolder" Name="Desktop"/>
<Directory Id="CommonAppDataFolder" Name="ProgramDataFolder">
  <Directory Id="AppDataMTK" Name="MTK">
    <Directory Id="AppDataBSStrage" Name="BSStrage">
      <Component Id="ComponentBSStrageShortcut" Guid="{8436995c-2e76-4030-b92d-c6b4bc243c43}">
        <CreateFolder/>
        <Shortcut Id="ShortcutBSStrageShortcut"
                  Directory="DesktopFolder"
                  Name="BSStrage""/>
      </Component>
    </Directory>
  </Directory>
</Directory>

请注意,目标目录必须在创建快捷方式时实际存在,否则您最终会遇到同样的问题:快捷方式损坏。这就是为什么我在<CreateFolder/>标签内添加Component标签,以便在安装时创建目录。

于 2012-08-14T14:18:52.833 回答
2

Shortcut/@Target 中的斜杠应该是反斜杠。Explorer 可能将您的快捷方式解释为“使用开关 /MTK 和 /BSStrage 启动 CommonAppDataFolder”。至少,这是我的第一个猜测。

于 2010-05-01T22:50:06.933 回答
1

我稍微改变了我的要求,并让代码按如下方式工作。现在更改为我创建 ProgramData 文件夹的快捷方式。

<!-- Desktop Shortcut --> 
  <Directory Id="DesktopFolder" Name="Desktop"/> 
  <Directory Id="CommonAppDataFolder" Name="ProgramDataFolder"/> 
  <Component Id="MTDesktopShortcut" Guid="{8436995c-2e76-4030-b92d-c6b4bc243c43}"> 
    <Shortcut Id="MTShortcut" 
              Directory="DesktopFolder" 
              WorkingDirectory="APPLICATIONFOLDER" 
              Target="[CommonAppDataFolder]" 
              Name="MT" 
              Show="normal"/> 
    <RegistryValue Action="write" 
                   Key="SOFTWARE/MT/BS" 
                   Root="HKCU" 
                   Type="string" 
                   KeyPath="yes" 
                   Value="ApplicationFolderName"/> 
  </Component> 

它可以正常工作并可以正常创建快捷方式。但是有一个问题,因为它在 AllUsers 桌面上创建快捷方式,而我希望在当前用户的桌面上创建快捷方式。我应该做什么改变?

另请注意,我的安装程序执行全用户安装,我无权更改它。我只需要一种在当前用户的桌面上创建此快捷方式的方法,而安装程序仍然可以进行全用户安装。

于 2010-05-13T07:21:25.887 回答