WiX, wie Sie verhindern, dass Dateien deinstallieren, obwohl wir vergessen haben, setzen Permanent="ja"
Haben wir ein Produkt installer erstellt mit Wix, mit einem Programmpaket ("V1") und einige Konfigurationsdateien. Nun, wir gehen, um ein major upgrade mit einem neuen Produkt-code, mit dem die alte version des Produkts deinstalliert und "V2" installiert ist. Was wir wollen, ist eine der Konfigurationsdateien zu deinstallieren, da es benötigt wird, für die V2 auch. Leider haben wir vergessen, um die Permanent="yes"
option, wenn die von uns gelieferten V1 (Lesen Sie diese Frage für weitere Informationen).
Hier kommt die Frage: gibt es eine einfache Möglichkeit zu verhindern das deinstallieren der Datei überhaupt? Natürlich könnten wir hinzufügen einer benutzerdefinierten Aktion in das Skript ein backup der Datei vor der deinstallation, und eine andere benutzerdefinierte Aktion wiederherstellen, danach aber IMHO zu sein scheint, dass overkill für diese Aufgabe, und möglicherweise nicht mit anderen teilen der MSI-Registrierung.
EDIT: Und ja, die NeverOverwrite="yes"
Attribut bereits gesetzt ist, in V2, und das Verhalten ist wie beschrieben hab ich es.
Ich glaube nicht, dass es hilft, etwas zu ändern, direkt in der Komponente Parameter der V2. Vielleicht gibt es eine Möglichkeit zum ändern der registry irgendwie in eine benutzerdefinierte Aktion vor der deinstallation von V1, so dass der installer Dienst meint, die Konfigurations-Datei in V1 installiert wurde mit Permanent="yes"
?
- Kann Sie nur installieren Sie diese Dateien, oder ist es, dass Sie wollen halten Sie die lokale Datei, da Sie möglicherweise haben wurden modifiziert?
- Das ist genau der Fall - die Konfigurationsdatei wurde möglicherweise geändert und sollte so bleiben, wie es ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen die
NeverOverwrite
Attribut für die KonfigurationsdateiBEARBEITEN
Habe ich gerade getestet, dies in einem test-setup. Zuerst funktionierte es nicht, denn ich hatte geplant die
RemoveExistingProducts
Aktion vorInstallInitialize
Sequenz. Dadurch wird das alte Produkt, bevor das neue Produkt installiert ist, kann es also nicht vergleichen.Jedoch wenn ich es nach
InstallFinalize
es funktionierte, verließ er die Datei dort auch wenn die ursprüngliche setup nichtNeverOverwrite
gesetzt. hier sind meine zwei test-Beispieleversion 1.0.0.0
version 1.0.1.0
So wie ich bin, dies zu beheben ist sehr einfach.
Ich nicht installieren yourapp.config-Dateien, sondern nur yourapp.config.neue
Beim ersten ausführen die Anwendung, bevor Sie etwas anderes zu tun überprüfen Sie die config-Datei. Wenn es keine gibt, machen Sie eine Kopie yourapp.config.neues zu yourapp.config
Dies ist sehr einfach, es braucht keine speziellen Attribute.
Wenn die Anwendung deinstalliert, die config-Datei nicht deinstalliert.
Wenn die Anwendung neu installiert-Datei gestört ist.
Beachten Sie, dass, wenn die Anwendung repariert die config nicht verändert.
Program
Verzeichnis, wo in den meisten Unternehmensumgebungen benötigen Sie administrative Zugriffsrechte, etwas zu schreiben gibt, die den installer hat, aber nicht ein "normales" Programm.