开始菜单带有子文件夹

3
我使用WiX并想要在用户的开始菜单中创建快捷方式,例如:
开始 -> [公司名称] -> [程序名称] -> App.exe 我可以轻松地这样做:
开始 -> [程序名称] -> App.exe 没有任何问题。
      <Directory Id="ProgramMenuFolder">
    <Directory Id="ProgramMenuDir" Name="RoverSoft Test">
    </Directory>
  </Directory>      
</Directory>

<DirectoryRef Id="ProgramMenuDir">
  <Component Id="ProgramMenuDirComponent" Guid="{A9858D4C-085A-4132-AD2E-F90A1E5C64A6}">
    <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
    <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
  </Component>
</DirectoryRef>    

但如果我再添加一个文件夹级别,那么就会出现错误:

错误1 ICE64:目录ProgramMenuSubDir在用户配置文件中,但未在RemoveFile表中列出。

据我所知,这意味着我应该在系统卸载后(在本例中从注册表中)完全清除它。如何做到这一点?

2个回答

4

对于用户个人资料中的每个文件夹,您都需要确保删除该文件夹。因此,您可以像下面这样调整示例:

<Directory Id='TARGETDIR' Name='SourceDir'>
  <Directory Id="ProgramMenuFolder">
    <Directory Id="ProgramMenuCompanyDir" Name="Company Name">
       <Directory Id="ProgramMenuProgramDir" Name="ProgramName"/>
    </Directory>
  </Directory>
</Directory>

<Component Id="ProgramMenuCompanyDirComponent" Directory='ProgramMenuCompanyDir'>
  <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name='InstallVersion'
                 Value="[ProductVersion]" Type="string" />
  <RemoveFolder Id="RemoveProgramMenuCompanyDir" On="uninstall" />
</Component>

<Component Id="ProgramMenuProgramDirComponent" Directory='ProgramMenuProgramDir'>
  <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name='InstallFolder'
                 Value='[INSTALLFOLDER]' Type="string" />
  <RemoveFolder Id="RemoveProgramMenuProgramDir" On="uninstall" />
</Component>

这确保了所有每个用户文件夹都有单独的密钥路径(注册表键),并标记正确,以便在卸载期间删除。

0
这是我的代码。
<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFiles64Folder">
      <Directory Id="company" Name="company">
        <Directory Id="INSTALLFOLDER" Name="prod" >
         <Directory Id="INCLUDEDIR" Name="include">
         <Directory Id="THIRDPARTYDIR" Name="3rdParty">
         <Directory Id="BIN" Name="bin"></Directory>

         </Directory>  
        </Directory>
       </Directory>
      </Directory>
    </Directory>


 <Directory Id="ProgramMenuFolder" Name="Programs">
    <Directory Id="ProgramMenuDir" Name="prod">
      <Component Id="ProgramMenuDir" Guid="0118D11A-0CA3-4E04-8D27-0B73A279A7FD">
        <RemoveFolder Id='ProgramMenuDir' On='uninstall' />
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
      </Component>

    </Directory>
  </Directory>
 <Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
</Fragment>

快捷键将会是这样的:

    <DirectoryRef Id="INSTALLFOLDER">
    <Component Id="comp_bin_debug_30" Guid="EB4650EB-75DC-4562-9DC3-8FFDD9B55468">
    <File Id="file_bin_30" Source="..\bin\Debug.amd64\prod.exe" KeyPath="yes" DiskId="1" />
      <Shortcut Id="desktopProd" Directory="DesktopFolder" Name="prod"
      WorkingDirectory='INSTALLFOLDER' Icon="prod_GUI.ico" IconIndex="0" Advertise="yes" />
      <Shortcut Id="startmenuProd" Directory="ProgramMenuDir" Name="prod"
      WorkingDirectory='INSTALLFOLDER' Icon="prod_GUI.ico" IconIndex="0" Advertise="yes" />      
     </Component>
   </DirectoryRef>

如果您的“属性”->“工具设置”->“禁止ICE验证”未开启,则此功能将无法正常工作。这意味着您将无法进行清晰的卸载。 - Oleg Sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接