2016-04-12 6 views
1

Verwenden von WiX zum Erstellen eines Installationsprogramms. Als Teil des Installationsprozesses möchte ich ein Excel-Add-In im generischen Excel-Add-In-Ordner (%APPDATA%\Microsoft\AddIns) installieren. Hier ist der relevante Teil des Codes, die ich geschrieben habe:Verhindern, dass WiX den MS Office AddIns-Ordner bei der Deinstallation löscht

<Directory Id="MicrosoftFolder" Name="Microsoft"> 
    <Directory Id="AddInsFolder" Name="AddIns"> 
    <Component Id="COMP_MyAddInLib" Guid="MY-GUID-HERE"> 
     <File Source="\MyAddInLib.xll" Id="LibMyAddIn" /> 
     <RegistryValue Root="HKCU" Type="string" Key="Software\!(loc.ManufacturerName)\!(loc.ApplicationName)\MyAddIn" Name="INSTALLDIR" Value="[INSTALLDIR]" KeyPath="yes" /> 
     <RemoveFolder Id="RemoveAddInsFolder" On="uninstall" Property="AddInsFolder" /> 
     <RemoveFolder Id="RemoveMicrosoftFolder" On="uninstall" Property="MicrosoftFolder"/> 
    </Component> 
    </Directory> 
</Directory> 

Dies baut richtig und es funktioniert aber, wenn mein Add-In ist das einzige Element in dem %APPDATA%\Microsoft\AddIns Ordnern des Benutzers, der Add-Ins-Ordner wird gelöscht auf deinstallieren. Ich bin nicht wirklich sicher, ob dies Probleme für Excel (oder eine andere Office-Anwendung) verursachen könnte, aber da dieser Ordner von Office und nicht von meinem Installationsprozess erstellt wird, möchte ich es natürlich vermeiden, ihn zu entfernen.

Ich könnte die zwei <RemoveFolder> Tags entfernen, aber dann schlägt der Build mit zwei ICE64-Fehler fehl.

Irgendwelche Gedanken darüber, wie ich meine Add-In-Datei entfernen kann, aber die Ordnerstruktur erhalten und den Build-Fehler vermeiden kann?

Antwort

1

Wenn Sie nicht immer besitzen diese Ordner und es könnte andere Inhalte in ihnen von einer anderen Installation Ich würde nicht die RemoveFolder-Tags in Ihrer Komponente verwenden.

Dies wird Ihnen einige ICE-Validierungswarnungen geben. Wenn Sie wissen, dass Sie diese Ordner nicht entfernen sollten (Sie besitzen definitiv nicht den% APPDATA% \ Microsoft-Ordner), dann wissen Sie, dass Sie sie zurücklassen sollten. Die Komponente, die Sie installieren, wird ordnungsgemäß entfernt, da Sie diese besitzen, aber in diesem Fall ist es richtig, die Ordner zurückzulassen.

Was ich tun würde, ist ICE64 bei Release-Builds Ihres Installer-Projekts zu unterdrücken, aber lassen Sie die ICE-Validierung für Debug angezeigt.

definieren Gerade

<SuppressIces>ICE64</SuppressIces> 

Im wixproj für den Installateur unter dem Release-Konfiguration.

Oder fügen Sie ICE-Unterdrückung unterdrücken über die "WixProj-Eigenschaften> Werkzeugeinstellungen> Bestimmte ICE-Validierungen unterdrücken", wenn Sie Visual Studio verwenden.

Wenn Sie explizit mit cmd Linie bauen (Aufruf light.exe auf Ihrer Wix-Dateien) können Sie den Schalter -sice übergeben müssen: ICE64

EDIT: einen Blick auf die es scheint <RemoveFolder> Tag Vor diesem Hintergrund wird nicht entfernen Sie Ordner, die noch Dateien oder andere Ordner in ihnen haben, so sollte es OK sein, diese zwei RemoveFolder-Tags in Ihrer Komponente zu lassen, aber ich würde immer noch in Betracht ziehen, sie zu entfernen und die ICE64-Validierungswarnung unterdrücken.

+0

Beide Antworten sind gut, aber ich mag das, weil ich denke, dass es die sicherste Lösung ist.Ich würde es vorziehen, dass Ordner, die nicht von meinem Installationsprozess erstellt wurden, unverändert bleiben. Ich bin überrascht, dass es keinen besseren eingebauten Mechanismus dafür gibt, aber das Unterdrücken der ICE64-Fehler scheint der beste Weg zu sein. Danke für die Hilfe. –

0

Sie könnten eine benutzerdefinierte Aktion tun, die nur das Verzeichnis Remakes:

ExeCommand="cmd /C \"mkdir %APPDATA%\Microsoft\AddIns\"" 

ich es wahrscheinlich gegen Ende planen würde, vielleicht kurz vor InstallFinalize, um sicherzustellen, dass es läuft, nachdem der Ordner gelöscht wird. Stellen Sie außerdem sicher, dass der Rückgabecode ignoriert wird, andernfalls schlägt der Fehler fehl, wenn der Ordner noch vorhanden ist.

+0

Ich experimentierte mit diesem und es scheint wie eine praktikable Lösung. Ich akzeptierte die andere Antwort einfach, weil ich denke, dass es sicherer ist, da es die Ordnerstruktur nicht ändert. Vielen Dank für die Hilfe. –

Verwandte Themen