2016-05-12 48 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,但是一旦所有的产品都被卸载,你会留下一个文件夹。真的没有什么大不了的,但可能会让一些用户恼火。