2010-04-22 115 views
6

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

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

这只是一个疯狂的猜测,但你有没有尝试向目标文件夹路径添加尾部斜线? – 2010-04-22 09:03:24

回答

2

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

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

另请注意,我的安装程序执行全用户安装,我无权改变这一点。我只需要在Current User的桌面上创建这个快捷方式,而安装程序仍然可以进行全部用户安装。

3

我刚碰到同样的问题;似乎创造一个Shortcut标签与形式
Target="[CommonAppDataFolder]"正常工作的Target属性,而是试图追加子目录,如:
Target="[CommonAppDataFolder]\MTK\BSStrage"导致创建一个快捷方式是不起作用的。

幸运的是,我发现了一个解决方案。关键是要创建要创建一个快捷方式,然后包括含有Shortcut标签的Component标签,像这样的Directory标签导致目录层次结构:

<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标记内添加了<CreateFolder/>标记,以便在安装时创建目录。

相关问题