【问题标题】:Create a Desktop Shortcut to an existing FOLDER using WiX使用 WiX 为现有文件夹创建桌面快捷方式
【发布时间】:2011-02-10 23:24:31
【问题描述】:

我需要使用 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 非常陌生(才两天),以前从未使用过它。任何代码示例都会有很大帮助。

【问题讨论】:

  • 这只是一个疯狂的猜测,但您是否尝试过在目标文件夹路径中添加斜杠?

标签: c# wix installation desktop-shortcut


【解决方案1】:

我刚刚遇到了同样的问题;似乎使用表单的Target 属性创建Shortcut 标记
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>

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我稍微改变了我的要求,并让代码按如下方式工作。改变现在我创建了 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 桌面上创建快捷方式,而我希望在当前用户的桌面上创建快捷方式。我应该做些什么改变?

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

      【讨论】:

        猜你喜欢
        • 2012-08-05
        • 2014-01-21
        • 1970-01-01
        • 2011-01-13
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多