2016-05-12 34 views
1

我想創建一個使用WiX的應用程序的開始菜單快捷方式,問題是我收到一個Ice64錯誤,指出快捷方式目錄的父目錄不在RemoveFile表中。WiX Ice64錯誤的快捷方式父目錄

我不想在卸載時刪除此父文件夾(組織文件夾),因爲其他應用程序可能在其他子項中有快捷方式。

我的代碼看起來像

<Feature Id="ProductFeature" Title="MyApplication" Level="1"> 
    <ComponentGroupRef Id="Components" /> 
    <ComponentRef Id="ProfilesShortcut"/> 
</Feature> 

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="OrgDir" Name="OrganisationName"> 
     <Directory Id="AppDir" Name="MyApplication" /> 
    </Directory> 
    </Directory> 
    <Directory Id="ProgramMenuFolder"> 
    <Directory Id="ProgFilesOrgDir" Name="OrganisationName"> 
     <Directory Id="ProgFilesAppDir" Name="MyApplication" /> 
    </Directory> 
    </Directory> 
    </Directory> 
</Fragment> 

<Fragment> 
<DirectoryRef Id="ProgFilesAppDir"> 
    <Component Id="ProfilesShortcut" Guid="*"> 
    <Shortcut Id="ApplicationStartMenuShortcut" 
       Name="MyApplication" 
       Description="My Application" 
       Target="[#MyApplication.exe]" 
         WorkingDirectory="AppDir"/> 
    <RemoveFolder Id="ProgFilesAppDir" On="uninstall"/> 
    <RegistryValue Root="HKCU" Key="Software\Organisation\MyApplication" Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
    </Component> 
</DirectoryRef> 
</Fragment> 

回答

2

隨意刪除文件元素添加到您的快捷方式組件。

如果選擇父組件進行安裝或刪除,請刪除空文件夾。

RemoveFolder元素將僅刪除空文件夾,所以如果您的產品不是該套件的唯一部分安裝,它將僅保留父文件夾,因爲其他產品會將文件/文件夾放在那裏。考慮您的產品是安裝的唯一一個(應刪除該文件夾)或是要從套件中卸載的最後一個產品(應刪除該文件夾)的情況。在這兩種情況下,文件夾應該被刪除。定義RemoveFolder元素的順序可能很重要,所以我會測試在ProgFilesAppDir刪除元素前後放置ProgramFilesOrgFolder remove元素,以查看其中一個元素是否失敗。

另外,你也可以禁止ICE64,但是一旦所有的產品都被卸載,你會留下一個文件夾。真的沒有什麼大不了的,但可能會讓一些用戶惱火。