Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Temporäre Dateien löschen


3 replies to this topic

Frank H

Frank H
  • Full Members
  • 9 posts

Posted 27 June 2007 - 08:59

Hallo,

ich arbeite zur Zeit mit dem Setup-Projekt unter Microsoft Visual Studio.

Ich habe eine benutzerdefinierte Aktion angelegt, die auch so weit funktioniert. Nun möchte ich am Ende der Installation die temporären Dateien und auch die Datei für die benutzerdefinierte Aktion (Installer-Klasse) wieder löschen.

Füge ich eine weitere benutzerdefinierte Aktion unter Commit ein, so kommt am Ende des Setups die Fehlermeldung "Die Datei CommitCustomAction.InstallState konnte nicht gefunden werden."
Füge ich die Datei sowohl unter "Installieren" als auch unter "Commit ausführen ein", so funktioniert zwar das Löschen der temporären Dateien, nicht jedoch das Löschen der Installer-Datei. Es kommt die Fehlermeldung "Der Zugriff auf den Pfad installer.dll wurde verweigert.", obwohl diese Datei beim Commit gar nicht mehr gebraucht wird.

Im Moment stellen sich mir folgende Fargen:
1. Gibt es eine Möglichkeit, die Installer.dll nach der Installation zu löschen?

2. Kann man ein temporäres Verzeichnis angeben, das nach der Installation automatisch gelöscht wird (ohne benutzerdefinierte Aktion)?

3. Gibt es eine Möglichkeit, vor der Installation eine Sicherungskopie des Anwendungsverzeichnisses (das Verzeichnis, das der Anwender bei der Installation angibt) anzulegen? Hier habe ich das Problem, dass benutzerdefinierte Aktionen erst nach dem Kopieren der Dateien ausgeführt werden können.

Vielen Dank
Frank

akerl

akerl
  • Full Members
  • 104 posts

Posted 27 June 2007 - 09:31

Hi Frank,

die Installerklassen aus .NET ermöglich zwar auf einfache Weise die Integration als CA in den Installationsprozess; sie sind aber alles andere als komfortabel und stabil. Denn MSI kennt kein .NET und kann somit auch keine .NET Klassen als CA verwenden.Demzufolge wird ein C++ Wrapper integriert, der die Funktionsaufrufe weiter leitet. Dein Problem resuiltiert daraus. Du kannst nur Installerklassen als CA verwenden, die im Rahmen der Installation auf das System gebracht werden. Auch wenn das Löschen funktionieren würde, die Assembly ist Bestandteil des Produktes und würde durch SelfRepair wieder hergestellt werden. Ist somit der falsche Weg.
Die einzig ware Möglichkeit ist, die Verwendung von klassischen C++ DLL's als CA, die im Binary Stream eingebunden werden. Diese werden nur zur Installationszeit benötigt; werden daher in %TEMP% entpackt, verwendet und anschließend automatisch gelöscht. Funktioniert natürlich auch mit EXE, VBS, JS. Allerdings kann ein solches Paket nicht mit Visual Studio entworfen werden; Nachbearbeitung mit Orca ist erforderlich oder gleich die Erstellung mit WIX o.ä.

Zu Deinem Punkt 3: Ja, das funktioniert, aber widerum nicht mit VS. Liegt daran, dass sich den Ausführzeitpunkt der Deferred CA unter VS nicht definieren kann.

Achso, das MSI-Team hat Guidelines herausgegeben, die sich auf CAs erstrecken. Hier ist gut erkennbar, dass die Installerklassen nicht den Vorgaben entsprechen (Rule 23 und 25):
http://blogs.msdn.co.../12/595950.aspx

Edited by akerl, 27 June 2007 - 09:32.

Andreas Kerl

Inside Windows Installer 4.5
ISBN 3-86645-431-7


Frank H

Frank H
  • Full Members
  • 9 posts

Posted 28 June 2007 - 09:28

Hallo,

danke für die Auskunft. Zur Zeit steht mir noch kein InstallShield zur Verfügung, es ist aber geplant, eine Lizenz zu erwerben.
Ich habe mir gerade die Hilfe dazu angeschaut. Dort kann man ja für benutzerdefinierte Aktionen auch ein InstallShield-Installationsprojekt, unter anderem auch in C#.NET anlegen. Lassen sich die beschriebenen Probleme dadurch beheben?

Gruß
Frank

akerl

akerl
  • Full Members
  • 104 posts

Posted 28 June 2007 - 17:52

Nein, denn der MSI kennt kein .NET und kann somit auch Assemblies nicht direkt ansprechen - also Wrapper. Ich meine IS und auch Wise verwenden den gleichen Wrapper wie die VS-Projekte. Allerdings meine ich, dass mit IS die Assembly nicht Bestandteil der Anwendung sein muss, sondern quasi als Voraussetzung für die Installation fungiert. Hier sollte ein IS-Profi wie Stefan mehr zu sagen können.

Andreas Kerl

Inside Windows Installer 4.5
ISBN 3-86645-431-7