2016-04-29 7 views
1

installiert habe ich diese Eigenschaft:Wix Reparatur installiert in Standardpfad, nicht dort, wo die App

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER"/> 

Meine Verzeichnisse:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="LocalAppDataFolder"> 
    <Directory Id="LocalAppDataCompany" Name="Company"> 
     <Directory Id="INSTALLFOLDER" Name="Product" /> 
    </Directory> 
    </Directory> 
</Directory> 

Und es erfolgreich kompiliert. Wenn ich die MSI ausführe, installiert es die Dateien in C:\Users\[CurrentUser]\AppData\Local\Company\Product wie erwartet.

Aber das Problem ist:

  1. ich das Installationsprogramm ausführen und den Pfad ändern (lassen Sie sich im Dialog sagen, änderte ich den Pfad zu Product2
  2. Das Produkt in ...\AppData\Local\Company\Product2 erfolgreich installiert ist
  3. I läuft wieder das Installationsprogramm, und wählt Reparatur
  4. Jetzt habe ich 2 Instanz des Produktes:

C:\Users\[CurrentUser]\AppData\Local\Company\Product C:\Users\[CurrentUser]\AppData\Local\Company\Product2

Wie kann ich die Reparatur, reparieren Dateien neu zu installieren (bei der Reparatur) in der ...\AppData\Local\Company\Product2 (oder wo auch immer die App installiert ist ursprünglich)?

Ich habe versucht, Registry-Suche (seit ich den Wert von INSTALLFOLDER in der Registrierung speichern), aber es funktioniert nicht.

+0

Können Sie Ihre RegistrySearch- und RegistryValue-Komponente in der Frage freigeben? Dies ist der Weg, dies zu tun, damit ich vermute, dass etwas falsch geschrieben wurde. –

Antwort

1

EDIT: Wow, ich muss wirklich die komplette Frage vor der Beantwortung lesen. Sie haben gerade festgestellt, dass Sie diesen Wert in der Registrierung gespeichert haben. Ich werde meine Antwort trotzdem so lassen, wie es ist, da es nützlich sein könnte.


Sie benötigen ein Muster erinnern, mich zu implementieren, so dass Ihre Lieblingsaufnahmeeigenschaften installieren, installieren während der anfänglichen modifiziert worden sein. Das Installationsverzeichnis ist wahrscheinlich die am häufigsten geänderte Eigenschaft, an die Sie sich erinnern sollten. Es gibt eine Menge von Installern, die das nicht richtig machen, und Sie werden bemerken, wenn Sie upgraden, dass sie immer auf das Standardinstallationsverzeichnis, wo Sie vorher installiert haben, voreingestellt sind, was lästig sein kann.

This erklärt ziemlich gut das Konzept des "erinnern mich" Musters. In den meisten Fällen können Sie mit der einfachen Implementierung davonkommen.

Das Wesentliche ist, dass Sie den Wert des geänderten Installationsverzeichnisses (in der Regel in der Registrierung) speichern müssen, und versuchen Sie dann, es jedes Mal abzurufen, wenn Sie das Installationsprogramm anschließend ausführen.

Für die Eigenschaft INSTALLFOLDER sollten Sie nur zwei Dinge hinzufügen, eine Registrierungssuche und einen Registrierungsschlüssel.

Zuerst müssen wir eine neue Komponente mit einem RegistryKey hinzuzufügen, um die install des Wert der Registrierung

können
<Component Id="InstallFolderRegistry" Directory='INSTALLFOLDER'> 
    <RegistryValue Root='HKCU' Key='SOFTWARE\[Manufacturer]\[ProductName]' 
       Name='InstallFolder' Value='[INSTALLFOLDER]' 
       Type='string' KeyPath="yes" />  
</Component> 

Sie auch diesen Registrierungswert in einer anderen Komponente huckepack zu schreiben, wenn Sie nur wünschen entfernen „KeyPath =“ yes "".

Dies wird den Wert der Eigenschaft INSTALLFOLDER in der Registrierung während der Installation Zeit setzen.

Nun müssen wir versuchen, diesen Wert zu lesen, wenn er beim Start vorhanden ist, damit wir bei Upgrades oder bei Reparaturen den richtigen Ort finden, den der Benutzer für die Installation ausgewählt hat.

Jetzt, wenn Sie das Installationsprogramm reparieren, sollte diesen Registrierungsschlüssel finden und dann das richtige Verzeichnis reparieren. Auch während der Aktualisierung wird der Installationsort auf denselben Speicherort wie das derzeit installierte Produkt festgelegt.

Wenn Sie einen nicht statischen ProductName oder Hersteller haben, können Sie einfach einen statischen Text anstelle von "[Manufacturer]" und "[ProductName]" in den Registrierungspfad einfügen.

+0

Danke für Ihre Antwort. Ich werde es versuchen, ich könnte etwas verpasst haben, wenn ich das Remember Me-Muster mit der Registrierung gemacht habe :) – KaeL

Verwandte Themen