2016-05-12 18 views
1

Ich versuche, eine Startmenüverknüpfung für eine Anwendung mit WiX zu erstellen, das Problem ist, dass ich einen Ice64-Fehler empfange, der besagt, dass das übergeordnete Verzeichnis des Verknüpfungsverzeichnisses nicht in der RemoveFile-Tabelle ist .WiX Ice64 Fehler für Shortcut Elternverzeichnis

Ich möchte diesen übergeordneten Ordner (Organisationsordner) nicht bei der Deinstallation entfernen, da andere Anwendungen möglicherweise Verknüpfungen in anderen untergeordneten Elementen haben.

Mein Code sieht aus wie

<Feature Id="ProductFeature" Title="MyApplication" Level="1"> 
    <ComponentGroupRef Id="Components" /> 
    <ComponentRef Id="ProfilesShortcut"/> 
</Feature> 

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="OrgDir" Name="OrganisationName"> 
     <Directory Id="AppDir" Name="MyApplication" /> 
    </Directory> 
    </Directory> 
    <Directory Id="ProgramMenuFolder"> 
    <Directory Id="ProgFilesOrgDir" Name="OrganisationName"> 
     <Directory Id="ProgFilesAppDir" Name="MyApplication" /> 
    </Directory> 
    </Directory> 
    </Directory> 
</Fragment> 

<Fragment> 
<DirectoryRef Id="ProgFilesAppDir"> 
    <Component Id="ProfilesShortcut" Guid="*"> 
    <Shortcut Id="ApplicationStartMenuShortcut" 
       Name="MyApplication" 
       Description="My Application" 
       Target="[#MyApplication.exe]" 
         WorkingDirectory="AppDir"/> 
    <RemoveFolder Id="ProgFilesAppDir" On="uninstall"/> 
    <RegistryValue Root="HKCU" Key="Software\Organisation\MyApplication" Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
    </Component> 
</DirectoryRef> 
</Fragment> 

Antwort

2

Fühlen Sie sich frei um das Abtrennungsdateielement Ihrer Verknüpfung Komponente hinzuzufügen.

Entfernen Sie einen leeren Ordner, wenn die übergeordnete Komponente zum Installieren oder Entfernen ausgewählt ist.

wird das RemoveFolder Element entfernt nur leere Ordner so, wenn Ihr Produkt nicht der einzige Teil dieser Suite installiert ist, wird es allein die übergeordneten Ordner verlassen, da andere Produkte dort Dateien/Ordner gestellt haben werden. Stellen Sie sich das Szenario vor, in dem Ihr Produkt entweder das einzige installierte ist (sollte den Ordner entfernen) oder das letzte, das aus der Suite deinstalliert wird (sollte den Ordner entfernen). In diesen beiden Fällen sollte der Ordner entfernt werden. Die Reihenfolge, in der RemoveFolder-Elemente definiert werden, könnte von Bedeutung sein. Daher würde ich testen, ob das Element "ProgramFilesOrgFolder remove" vor und nach dem Element ProgFilesAppDir remove eingefügt wird, um zu sehen, ob einer von ihnen fehlschlägt.

Alternativ können Sie ICE64 einfach unterdrücken, aber dann werden Sie einen Ordner zurücklassen, sobald alle Produkte deinstalliert sind. Nicht wirklich eine große Sache, aber könnte für einige Benutzer ärgerlich sein.