快捷父目录的WiX Ice64错误

时间:2016-05-12 12:42:44

标签: wix

我正在尝试使用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>

1 个答案:

答案 0 :(得分:2)

随意将删除文件元素添加到快捷方式组件中。

  

如果选择安装或删除父组件,则删除空文件夹。

RemoveFolder元素只会删除空文件夹,因此如果您的产品不是安装该套件的唯一部分,它将保留父文件夹,因为其他产品会将文件/文件夹放在那里。考虑以下情况:您的产品是唯一安装的产品(应该删除文件夹),或者是最后一个要从套件中卸载的产品(应该删除该文件夹)。在这两种情况下,应删除该文件夹。 RemoveFolder元素定义的顺序可能很重要,所以我会测试在ProgFilesAppDir之前和之后删除元素的ProgramFilesOrgFolder,只是为了看看其中一个是否失败。

或者你可以压制ICE64,但是一旦卸载了所有产品,你就会留下一个文件夹。实际上并不是一件大事,但对某些用户来说可能会很烦人。