Ich beschäftige mich gerade mit dem Windows Installer XML Toolset und hänge seit geraumer Zeit an einem kleinem Problem.
Bei der Installation meines Programmes wird auch eine Config.xml installiert, welche danach von dem Benutzer auf seine Vorlieben geändert wird.
Das diese Config.xml bei einem Upgrade nur auf Wunsch des Benutzers überschrieben wird, habe ich schon eingebaut, jetzt hapert es aber bei der Deinstallation.
Ich möchte gerne eine Messagebox anzeigen lassen, welche den Benutzer fragt ob er seine Config.xml auch deinstallieren möchte.
Bei der Auswahl von "Ja" wird sie samt den anderes Dateien mit entfernt. Bei "Nein" soll sie dort bleiben, wo sie liegt und nicht deinstalliert werden.
Wenn hier ein WiX-Erfahrener ist, der mir bei meinem Problem zu helfen weiß, wäre das super :)
Ist dies auch Möglich, wenn ich die MondoUI verwende?
Ich habe schon mehrere Anleitungen gesehen, wie man in die BuildIn-UI´s seine eigenen Dialoge einbinden kann, jedoch fand ich das alles sehr aufwändig, weil es immer darum ging einen ganzen Dialog einzubinden.
Ich möchte ja einfach am Anfang der Deinstallation ein kleines Fenster wie in C# (MessageBox.Show)anzeigen lasen und den Wert der Benutzereingabe dann der "WirklichLoeschen" variable hinzuweisen.
Soweit wie ich mich durch die Foren gewühlt habe bietet WiX leider keine deartige Funktion.
Außer <Condition Message="" </Condition>, welche aber das Setup komplett abbricht.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gnozo am .
eigene Dialoge kannst du auch bei der MondoUI verwenden (mach ich z.B. auch so).
Eine eigene MessageBox könntest du via einer CustomAction bereitstellen. ABER: Der Sinn bei MSIs ist es, dass alles im Context des MSIs läuft und keine Benutzereingaben von "ausserhalb" stattfinden sollen. Ein MSI sollte auch immer im Silent Modus laufen, was bei einer MessageBox dann nicht mehr funktioniert.
Schnapp dir am besten die Sourcen von WiX und schau dir an, wie die MondoUI aufgebaut ist (ist alles in den Verezeichnissen zu finden). Dann baust du dir einen eigenen kleinen Dialog (Vorlagen hast du dann ja genug) und setzt den ein. Das ist kein Hexenwerk und leicht verständlich.
Von einer MessageBox würde ich definitiv abraten.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Dann habe ich noch die Referenz in der wixUI_Mondo auf meinen geänderten Dialog gelegt und beide in mein Projekt eingebunden.
Wenn ich das Projekt nun kompiliere zeigt mir der Compiler diesen Fehler an:
Fehler
ICE17: PushButton: 'Back' of Dialog: 'MaintenanceTypeDlg' does not have an event defined in the ControlEvent table. It is a 'Do Nothing' button.
Ich habe an diesem Button selber nichts geändert und Ihn auch mit anderen Buttons aus anderen Dialogs verglichen und keine Unterschiede festgestellt.
Wenn ich den Installer, der daraus entstanden ist, benutze, wird mir leider meine Checkbox nicht angezeigt und die Buttons "Remove,Repair,Add" funktionen auch nicht mehr. Also ich kann drauf klicken ohne das sich etwas tut.
Ich weiß jetzt leider nicht, wie ich weiter komme. Hattest du vielleicht mal mit einem ähnlichem Problem zu kämpfen und kannst mir einen Lösungsvorschlag machen?
EDIT: Man muss auch alle "MaintenanceTypeDlg" in seiner eigenen WixUI_Mondo.wxs auf seinen eigenen "MyMaintenanceTypeDlg" abändern.....
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gnozo am .
Also ich konnte den Dialog jetzt einbinden und kann die CheckBox auch setzen, nur leider deinstalliert er die Config.xml einfach nicht.
Ich weiß nicht genau, wo ich das RemoveFile einbinden soll.
Bis jetzt hab ich es in meinem <Directory> Block, wo auch die Dateien zur Installation verzeichnet sind:
ich hatte vor kurzen auch das Problem, dass sich etwas nicht deinstalieren ließ.
Ursache war die Guid der Komponente.
Ich hatte ein wiederverwendbares Grundgerüst der wxs-Datei benutzt, aber nicht alle enthaltenen Guid's geändert. Könnte dies bei dir auch so sein?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von RX8 am .