使用WiX为现有FOLDER创建桌面快捷方式

时间:2010-04-22 08:54:19

标签: c# wix installer desktop-shortcut

我需要使用Wix为现有FOLDER(不是文件)创建桌面快捷方式。为了详细说明,我的安装程序有一个使用与之关联的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来说是非常新的(它只用了两天),之前从未使用它。任何代码示例都会有很大的帮助。

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题;似乎创建了一个Shortcut标记,其中包含格式为Target的属性 Target="[CommonAppDataFolder]"工作正常,但尝试附加诸如
的子目录 Target="[CommonAppDataFolder]\MTK\BSStrage"会导致创建无效的快捷方式。

幸运的是,我发现了一个解决方案。诀窍是创建一个Directory标记的层次结构,通向您要创建快捷方式的目录,然后包含Component标记,其中包含Shortcut标记,如下所示: / p>

<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标记,以便在安装时创建目录。

答案 1 :(得分:2)

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

答案 2 :(得分: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 Desktop上创建快捷方式,而我希望它在当前用户的桌面上创建。我应该做些什么改变?

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