使用Wix创建/删除startmenu快捷方式时出现问题
我正在尝试为我的应用程序在“程序文件”菜单上创建快捷方式。但是,由于我的公司可能有许多产品都有自己的安装程序,我希望将它们放在菜单上的子文件夹中,每个安装程序都将其产品快捷方式添加到此子菜单中使用Wix创建/删除startmenu快捷方式时出现问题,wix,wix3.5,Wix,Wix3.5,我正在尝试为我的应用程序在“程序文件”菜单上创建快捷方式。但是,由于我的公司可能有许多产品都有自己的安装程序,我希望将它们放在菜单上的子文件夹中,每个安装程序都将其产品快捷方式添加到此子菜单中 <DirectoryRef Id="ApplicationProgramsFolder"> <Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C"> <Sho
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Product Name Installer"
Description="Product Name Installer"
Target="[APPLICATIONROOTDIRECTORY]YourExe.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<Shortcut Id="UninstallProduct"
Name="Uninstall Product Name"
Target="[INSTALLLOCATION]YourExe.exe"
Arguments="/x [ProductCode]" Description="Uninstalls Product Name" />
<RemoveFolder Id="ApplicationProgramsFolder"
On="uninstall"/>
<RegistryValue Root="HKCU"
Key="Software\Solution\Product name"
Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
到目前为止,我已经做到了这一点,但当我卸载一个时,它会在启动菜单上留下它的人工制品,如果我卸载所有这些人工制品,它仍然会留下公司文件夹以及任何失败的子菜单
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Product Name Installer"
Description="Product Name Installer"
Target="[APPLICATIONROOTDIRECTORY]YourExe.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<Shortcut Id="UninstallProduct"
Name="Uninstall Product Name"
Target="[INSTALLLOCATION]YourExe.exe"
Arguments="/x [ProductCode]" Description="Uninstalls Product Name" />
<RemoveFolder Id="ApplicationProgramsFolder"
On="uninstall"/>
<RegistryValue Root="HKCU"
Key="Software\Solution\Product name"
Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
这是我试图使用的WIX代码的一部分。我在不同产品的多个安装程序中使用相同的代码:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name ="PFiles">
<Directory Id="CompanyFolder" Name="!(loc.ManufacturerName)">
<Directory Id="INSTALLDIR" Name="!(loc.ProductName)"/>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="CompanyProgramsFolder" Name="!(loc.ManufacturerName)">
<Directory Id="ProductFolder" Name="!(loc.ProductName)"/>
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="CompanyProgramsFolder">
<Component Id="CompanyProgramsFolderComponent" Guid="{SOME GUID}" >
<RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
<RemoveFolder Id="CompanyProgramsFolder" On="uninstall"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="ProductFolder">
<Component Id="ApplicationShortcut" Guid="SOME GUID">
<Shortcut Id="ApplicationStartMenuShortcut" Icon="Company.ico" Name="!(loc.ProductName)" Description="!(loc.ApplicationDescription)" Target="[INSTALLDIR]MyApplication.exe" WorkingDirectory="INSTALLDIR"/>
<Shortcut Id="UninstallProduct" Icon="Company.ico" Name="Uninstall !(loc.ProductName)" Description="Uninstalls !(loc.ProductName)"
Target="[SystemFolder]msiexec.exe"
Arguments="/x [ProductCode]"/>
<RemoveFolder Id="ProductFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)\!(loc.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<!-- Set the components defined in our fragment files that will be used for our feature -->
<Feature Id="MainFeature" Title="!(loc.ProductName)" Description="!(loc.ApplicationDescription)" Level="1">
<ComponentGroupRef Id="Files" />
<ComponentRef Id="CompanyProgramsFolderComponent" />
<ComponentRef Id="ApplicationShortcut" />
</Feature>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Product Name Installer"
Description="Product Name Installer"
Target="[APPLICATIONROOTDIRECTORY]YourExe.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<Shortcut Id="UninstallProduct"
Name="Uninstall Product Name"
Target="[INSTALLLOCATION]YourExe.exe"
Arguments="/x [ProductCode]" Description="Uninstalls Product Name" />
<RemoveFolder Id="ApplicationProgramsFolder"
On="uninstall"/>
<RegistryValue Root="HKCU"
Key="Software\Solution\Product name"
Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
有没有办法让它发挥作用?我对注册表值在这里发挥的功能感到不舒服,因此我可能对它们的使用很幼稚。试试下面的方法..它对我很有用。
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Product Name Installer"
Description="Product Name Installer"
Target="[APPLICATIONROOTDIRECTORY]YourExe.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<Shortcut Id="UninstallProduct"
Name="Uninstall Product Name"
Target="[INSTALLLOCATION]YourExe.exe"
Arguments="/x [ProductCode]" Description="Uninstalls Product Name" />
<RemoveFolder Id="ApplicationProgramsFolder"
On="uninstall"/>
<RegistryValue Root="HKCU"
Key="Software\Solution\Product name"
Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Product Name Installer"
Description="Product Name Installer"
Target="[APPLICATIONROOTDIRECTORY]YourExe.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<Shortcut Id="UninstallProduct"
Name="Uninstall Product Name"
Target="[INSTALLLOCATION]YourExe.exe"
Arguments="/x [ProductCode]" Description="Uninstalls Product Name" />
<RemoveFolder Id="ApplicationProgramsFolder"
On="uninstall"/>
<RegistryValue Root="HKCU"
Key="Software\Solution\Product name"
Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
最后,在产品功能下添加此组件,如下所示(确保ID与上面的匹配):
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="20BC8446-684B-44F5-A1E3-AF6010EAF37C">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Product Name Installer"
Description="Product Name Installer"
Target="[APPLICATIONROOTDIRECTORY]YourExe.exe"
WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
<Shortcut Id="UninstallProduct"
Name="Uninstall Product Name"
Target="[INSTALLLOCATION]YourExe.exe"
Arguments="/x [ProductCode]" Description="Uninstalls Product Name" />
<RemoveFolder Id="ApplicationProgramsFolder"
On="uninstall"/>
<RegistryValue Root="HKCU"
Key="Software\Solution\Product name"
Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
如果要同时删除桌面和“开始”菜单快捷方式,该怎么办。是否应创建多个注册表项并删除文件夹项?