我需要使用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来说是非常新的(它只用了两天),之前从未使用它。任何代码示例都会有很大的帮助。
答案 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桌面上创建此快捷方式的方法,而安装程序仍然可以进行全用户安装。