2010-04-22 61 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/>標記,以便在安裝時創建目錄。

相關問題