Entschuldigung, wenn es eine schlechte Etikette ist, meine eigene Frage zu beantworten.
Kürzlich bin ich auf die Informationen zur Eigenschaft DISABLEADVTSHORTCUTS gestoßen . Ich habe eine Installation mit angekündigten Verknüpfungen erstellt und die Eigenschaft DISABLEADVTSHORTCUTS auf 1 gesetzt, wodurch nicht angekündigte Verknüpfungen erstellt wurden. Dadurch werden ICE43-Fehler umgangen, da eine angekündigte Verknüpfung eine Datei als Schlüsselpfad verwenden kann. Da DISABLEADVTSHORTCUTS festgelegt wurde, ersetzt Windows Installer diese angekündigten Verknüpfungen durch reguläre Verknüpfungen.
Ich habe das InstallScope-Attribut des Paketelements auf "perMachine" gesetzt. Dadurch wird die ALLUSERS-Eigenschaft auf 1 gesetzt. Die Werte von ProgramMenuFolder und DesktopFolder werden dann in das All Users-Profil aufgelöst.
Für Ordner, die unter ProgramMenuFolder erstellt wurden, gibt es ein RemoveFolder- und ein RegistryValue-Element. Die Beispiele, die ich gesehen habe ( ex1 , ex2 ), verwenden HKCU als Root für den RegistryValue. Ich habe diesen Stamm in HKMU geändert, der je nach Wert von ALLUSERS in HKCU oder HKLM aufgelöst wird.
Kurz gesagt, wenn DISABLEADVTSHORTCUTS auf 1 gesetzt ist, erzeugen Ihre angekündigten Verknüpfungen keine ICE-Fehler, sondern werden bei der Installation in nicht angekündigte Verknüpfungen konvertiert. Ein RegistryValue mit Root-HKMU ist für einen KeyPath in Ordnung, solange er für eine nicht angekündigte Verknüpfung kein Schlüsselpfad ist.
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Name="Foobar 1.0" Id="YOURGUID-21F1-4026-ABD2-7CC7F8CE4D18" UpgradeCode="YOURGUID-AFA4-46C6-94AA-EEE3D104F903" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Acme Ltd.">
<Package Id="*" Keywords="Installer" Description="Acme's Foobar 1.0 Installer" Comments="Foobar is a registered trademark of Acme Ltd." Manufacturer="Acme Ltd." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" InstallScope="perMachine" />
<Media Id="1" Cabinet="Sample.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1" />
<Property Id="DiskPrompt" Value="Acme's Foobar 1.0 Installation [1]" />
<Property Id="DISABLEADVTSHORTCUTS" Value="1" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="Acme" Name="Acme">
<Directory Id="INSTALLDIR" Name="Foobar 1.0">
<Component Id="MainExecutable" Guid="YOURGUID-3E4F-47A2-86F1-F3162E9C4798">
<File Id="FoobarEXE" Name="FoobarAppl10.exe" DiskId="1" Source="FoobarAppl10.exe" KeyPath="yes">
<Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="HelperLibrary" Guid="YOURGUID-C7DA-4C02-A2F0-A6E089FC0CF3">
<File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" />
</Component>
<Component Id="Manual" Guid="YOURGUID-FF92-4BF4-A322-819A3B2265A0">
<File Id="Manual" Name="Manual.pdf" DiskId="1" Source="Manual.pdf" KeyPath="yes">
<Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Advertise="yes" />
</File>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Foobar 1.0">
<Component Id="ProgramMenuDir" Guid="YOURGUID-D1C2-4D76-BA46-C6FA79862E77">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKMU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id="Complete" Level="1">
<ComponentRef Id="MainExecutable" />
<ComponentRef Id="HelperLibrary" />
<ComponentRef Id="Manual" />
<ComponentRef Id="ProgramMenuDir" />
</Feature>
<Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
</Product>
</Wix>