使用Wix安装程序在开始菜单程序中添加子文件夹快捷方式

9

我想把我的程序快捷方式添加到开始菜单快捷方式中的一个现有文件夹中。例如: 所有程序 -> AppNameFolder -> AppNameVersionFolder -> AppShortcut

为了实现这一点,我添加了以下几行:

          <Directory Id="ProgramMenuFolderApp" Name="App">
                <Directory Id="ProgramMenuDir" Name="APP 6.3.0">

请将以下代码添加到我的.wxs文件中:

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="Program Files">
            <Directory Id="CompanyName" Name="CompanyName">
                <Directory Id="App" Name="App">
                    <Directory Id="INSTALLDIR" Name="App 6.3.0">
                        <Component Id="MainExecutable" Guid="23FFE6FD-2BEA-4946-9875-8DBEEA5AAF55">
                            <File Id="AppEXE" Name="App.exe" Source="App.exe" KeyPath="yes">
                                <Shortcut Id="startmenu" Directory="ProgramMenuDir" Name="App 6.3.0" WorkingDirectory='INSTALLDIR' Icon="App.exe" IconIndex="0" Advertise="yes" />
                                <Shortcut Id="desktopApp" Directory="DesktopFolder" Name="App 6.3.0" WorkingDirectory='INSTALLDIR' Icon="App.exe" IconIndex="0" Advertise="yes" />
                            </File>
                        </Component>
                    </Directory>
                </Directory>
            </Directory>
        </Directory>
        <Directory Id="ProgramMenuFolder" Name="Programs">
            <Directory Id="ProgramMenuFolderApp" Name="App">
                <Directory Id="ProgramMenuDir" Name="App6.3.0">
                    <Component Id="ProgramMenuDir" Guid="BF266F76-192A-493E-B5C7-C54660E61D7D">
                        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
                        <RegistryValue Root="HKCU" Key="Software\CompanyName\App6.3.0" Type="string" Value="" KeyPath="yes" />
                    </Component>
                </Directory>
            </Directory>            
        </Directory>
        <Directory Id="DesktopFolder" Name="Desktop" />
    </Directory>

在构建时,我遇到以下错误:

目录ProgramMenuFolderApp在用户配置文件中,但未列在RemoveFile表中

然而,我不想在卸载时删除更高级别的文件夹,我只想删除App 6.3.0文件夹及以下文件夹。

如何将快捷方式添加到开始菜单的程序子文件夹中?

1个回答

9
如果该消息来自ICE64,则为警告。应该理解ICE警告,如果可以接受则忽略。http://msdn.microsoft.com/en-us/library/aa369011(VS.85).aspx中提到:
“ICE64检查用户配置文件中的新目录在漫游方案中是否正确删除。”
“未能修复ICE64报告的警告或错误通常会导致在卸载期间完全清理计算机时出现问题。当安装了应用程序的漫游用户首次登录计算机时,所有配置文件都会复制到计算机上。在广告之后(漫游配置文件下载之后),安装程序验证目录已经存在,因此不会在卸载时删除它。这将使得目录永久留在用户的计算机上。”
“不清楚为什么您想在开始菜单中留下一个空的“App”目录。解决ICE问题似乎是最简单的。为此,请将另一个RemoveFolder元素添加到ProgramMenuDir组件中即可。”

太好了!我没有意识到即使与light.exe的链接显示错误,它仍然会创建MSI。 "App"目录不会为空,它将有其他文件夹,用于相同应用程序的不同版本。 - Seth
我刚刚在 ProgramMenuDir 组件中添加了 <RemoveFolder Id="ProgramMenuFolderApp" On="uninstall" />,但仍然遇到了错误。 - Seth
@Seth,在将RemoveFolder添加到ProgramMenuDir组件后,您仍然遇到了错误,是吗?我认为RemoveFolder应该在它要删除的文件夹内部,而不是与其同级。此外,您是否为第二个RemoveFolder添加了RegistryValue? - Rachel McMahan
我想在这个旧问题中添加一些有用的信息,Seth输入的可能问题是他设置了Id,但没有设置Directory。它所在的组件可能有不同的目录,而RemoveFolder会将其拾起。如果您指定Directory属性,则警告消失。 - JShumaker
除了@JShumaker的评论外,值得注意的是RemoveFolder仅在卸载后如果文件夹为空才会删除该文件夹。因此,如果您有其他共享相同文件夹结构的应用程序,则不会将它们删除。 - Lummo

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