代码之家  ›  专栏  ›  技术社区  ›  Sach

使用WiX创建现有文件夹的桌面快捷方式

  •  6
  • Sach  · 技术社区  · 14 年前

    我需要创建一个桌面快捷方式到一个现有的文件夹(不是一个文件)使用Wix。更详细地说,我的安装程序有一个用C编写的CustomAction程序。这个CustomAction程序创建一个名为“BSS”的文件夹,用户从中选择路径。

    C: \程序数据\MT\BSS

    <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似乎认为bstrage是一个文件/应用程序,因此它在位置C:\ProgramData\MT中放置了一个名为bstrage的虚拟应用程序的快捷方式。但是双击它并没有帮助,因为没有可以用来打开它的程序。

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

    3 回复  |  直到 9 年前
        1
  •  3
  •   Karl von L    12 年前

    我也遇到了同样的问题,似乎 Shortcut 标记为 Target 窗体的属性
    Target="[CommonAppDataFolder]" 工作正常,但尝试附加子目录,如
    Target="[CommonAppDataFolder]\MTK\BSStrage"

    幸运的是,我找到了解决办法。诀窍是建立一个 Directory 指向要创建快捷方式的目录的标记,该目录包含 Component 包含 标签,就像这样:

    <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/> 组成部分

        2
  •  2
  •   Rob Mensching    14 年前

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

        3
  •  1
  •   Sach    14 年前

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

    推荐文章