我正在编写一个包含根功能和三个嵌套功能的安装程序:
<Feature Id="FEATURE_BasicLibraries" Title="Basic Libraries" Level="1">
<ComponentGroupRef Id="CG_RequiredLibraries" />
<ComponentRef Id="CMP_Shortcuts" />
<Feature Id="FEATURE_App1" Title="App1" Level="1">
<ComponentGroupRef Id="CG_App1" />
</Feature>
<Feature Id="FEATURE_App2" Title="App2" Level="1">
<ComponentGroupRef Id="CG_App2" />
</Feature>
<Feature Id="FEATURE_App3" Title="App3" Level="1">
<ComponentGroupRef Id="CG_App3" />
</Feature>
</Feature>
每个嵌套功能都包含一个exe文件,该文件表示该功能安装的应用程序。根功能只是一组必要的Dll。
我愿意在开始菜单中创建三个快捷方式。我是这样做的:
<DirectoryRef Id="ShortcutsFolder">
<Component Id="CMP_Shortcuts" Guid="378C7AC2-9FA0-4895-A3A1-E7526B673BB4">
<Shortcut Id="App1MenuShortcut" Name="App1" Target="[InstallFolder]App1.exe"/>
<Shortcut Id="App2MenuShortcut" Name="App2" Target="[InstallFolder]App2.exe"/>
<Shortcut Id="App3MenuShortcut" Name="App3" Target="[InstallFolder]App3.exe"/>
<Shortcut Id="UninstallShortcut" Name="Uninstall" Target="[SystemFolder]\msiexec.exe" Arguments="/x [ProductCode]" />
<RemoveFolder Id="RemoveShortcutsFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\AppSuite" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
当我安装我的产品时,无论我选择哪种功能,我都会看到所有三个快捷方式(实际上是四个,包括卸载)。如何使安装程序仅为已安装的功能创建快捷方式?
我看到的唯一解决方案是为每个快捷方式创建多个组件。解决方案是直接的,但我需要在每个组件内部创建三个<RegistryValue>
标签。在这种情况下如何处理<RemoveFolder>
标签?
还有其他解决方案吗?
感谢任何帮助。感谢。
答案 0 :(得分:0)
为每个快捷方式创建一个组件。 Windows Installer没有&#34; partial&#34;组件。每个组件都可以有自己的RemoveFolder
和RegistryValue
条目。