我正在尝试使用WiX为应用程序创建一个开始菜单快捷方式,问题是我收到一条Ice64错误,指出快捷方式目录的父目录不在RemoveFile表中。
我不想在卸载时删除此父文件夹(组织文件夹),因为其他应用程序可能在其他子项中有快捷方式。
我的代码看起来像
<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>
答案 0 :(得分:2)
随意将删除文件元素添加到快捷方式组件中。
如果选择安装或删除父组件,则删除空文件夹。
RemoveFolder元素只会删除空文件夹,因此如果您的产品不是安装该套件的唯一部分,它将保留父文件夹,因为其他产品会将文件/文件夹放在那里。考虑以下情况:您的产品是唯一安装的产品(应该删除文件夹),或者是最后一个要从套件中卸载的产品(应该删除该文件夹)。在这两种情况下,应删除该文件夹。 RemoveFolder元素定义的顺序可能很重要,所以我会测试在ProgFilesAppDir之前和之后删除元素的ProgramFilesOrgFolder,只是为了看看其中一个是否失败。
或者你可以压制ICE64,但是一旦卸载了所有产品,你就会留下一个文件夹。实际上并不是一件大事,但对某些用户来说可能会很烦人。