2009-06-08 12 views
0

Während der Deinstallation des Visual Studio-Integrationspakets, das ich schreibe, muss "devenv.exe/setup" ausgeführt werden, um die VS-Benutzeroberfläche zu aktualisieren und die Paketinformationen aus dem Begrüßungsbildschirm zu entfernen.Wie führe ich eine benutzerdefinierte Aktion aus, nachdem Dateien während der MSI-Deinstallation gelöscht wurden?

Es muss jedoch ausgeführt werden, nachdem alle Add-In und Paketdateien gelöscht wurden. Meine aktuelle Konfiguration (mit einer benutzerdefinierten Aktion der Installer-Klasse, die während des Deinstallationsschritts aufgerufen wurde) bewirkt, dass devenv.exe zu früh ausgeführt wird, bevor die Dateien tatsächlich gelöscht wurden. Dies bedeutet, dass die Begrüßungsbildschirminformationen nicht aktualisiert werden.

Irgendwelche Ideen? Ich brauche nur devenv am Ende der Installation zu laufen, irgendwie - ich bin nicht an benutzerdefinierte Aktionen gebunden.

Antwort

0

Der Trick, so stellt sich heraus, war die Verwendung der neuen Deployment Tools Foundation von MS, um meine verwalteten Funktionen in eine nicht verwaltete DLL einzubetten und die Installer-Klasse vollständig zu umgehen. Ich verwende dann Orca (MSI-Editor), um die benutzerdefinierte Aktion zu einem bestimmten Zeitpunkt in der Installation hinzuzufügen.

Die Installer-Klasse unterstützt nur "verzögerte" benutzerdefinierte Aktionen, die zu einem bestimmten Zeitpunkt ausgeführt werden müssen.

+0

Ja, Sie sollten die benutzerdefinierte Aktion verzögert und wahrscheinlich direkt vor InstallFinalize hinzufügen - wodurch die Installations-Transaktion beendet wird, die bei InstallInitialize gestartet wurde. Systemänderungen sollten nur in dieser Transaktion durchgeführt werden, um eine ordnungsgemäße Systemwiederherstellung zu ermöglichen, wenn ein Fehler auftritt. Stellen Sie sicher, dass Ihre benutzerdefinierte Aktion tatsächlich einen genauen Rückgabecode meldet, um den Erfolg oder Fehler anzuzeigen. Dadurch wird das Setup-Rollback ausgeführt, wenn dies erforderlich ist, oder Sie müssen abschließen, wenn alles in Ordnung ist. Fügen Sie keine benutzerdefinierten Aktionen hinzu, die nach InstallFinalize Änderungen am System vornehmen. Sie könnten dazu führen, dass die Deinstallation des MSI fehlschlägt. –

0

Sie könnten Ihre benutzerdefinierte Aktion als Commit-Ausführung schreiben. Dies bedeutet, dass es nur nach einer erfolgreichen Deinstallation ausgeführt wird. Bedienen Sie es als REMOVE="ALL", um sicherzustellen, dass es nur bei der Deinstallation ausgeführt wird.

+0

das scheint nicht zu funktionieren. Ich verwende meine Installer-Klasse bereits während des Commits (Installation) und wenn sie beim Rollback ausgeführt wird, wird sie ausgeführt, bevor die Dateien gelöscht werden. – muusbolla

+0

Was meinst du mit "Rollback"? Rollback tritt nur auf, wenn während einer Installation ein Fehler auftritt und MSI alle Änderungen rückgängig machen muss, die es am System vorgenommen hat. Dies ist nicht das Gleiche wie Deinstallation - sprichst du über Rollback oder Deinstallation? –

Verwandte Themen