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

Error 2732: Directory Manager not initialized.


3 replies to this topic

Toto

Toto
  • Full Members
  • 9 posts

Posted 23 October 2010 - 10:02

Hallo,

ich muss im Rahmen eines Basic-MSI vor der Installations-Ausführungs-Sequenz RemoveExistingProducts eine Datei innerhalb eines Unterverzeichnisses des WindowsFolder duplizieren, da sie bei RemoveExistingProducts verändert wird.

Dazu habe ich eine CustomAction Typ 98 erstellt, welche dies per cmd.exe /Q /C "copy ... /Y" erledigen soll.
Als Arbeitsverzeichnis der CustomAction ist WindowsFolder_XXX angegeben.
In der Directory-Tabelle gibt es dazu den Eintrag:
WindowsFolder_XXX, WindowsFolder, XXX

Nun kommt es jedoch bei Ausführung dieser Aktion zum Abbruch mit Fehler 2732. Der Verzeichnis-Manager wurde nicht initialisiert. Die Hilfe zum Error-Code sagt
QUOTE
The directory manager is responsible for determining the target and source paths. It is initialized during the costing actions (CostInitialize action, FileCost action, and CostFinalize action). A standard action or custom action made a call to a function requiring the directory manager before the initialization of the directory manager. This action should be sequenced after the costing actions.
jedoch kann ich diese CustomAction nicht hinter RemoveExistingProducts ausführen.

Gibt es einen anderen Weg, vor RemoveExistingProducts eine Datei innerhalb eines Unterorders des SystemFolder zu kopieren?

Edited by Toto, 23 October 2010 - 14:04.

Best Regards / Mit freundlichen Grüßen
Andreas Marschall

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 25 October 2010 - 11:12

Hallo Andreas,

wenn du die Action nach CostFinalize aber vor RemoveExistingProducts einfügst, dann sollte es funktionieren.
Alternativ kannst du auch das Working Directory frei lassen und mit absoluten Pfaden arbeiten.
Bedenke aber auf jeden Fall, dass die Custom Action (da immediate) mit eingeschränkten Rechten läuft, also keine Schreibrechte im Programmverzeichnis oder Windows Ordner hat (außer dein ganzes Setup läuft per setup.exe mit erhöhten Rechten).

Toto

Toto
  • Full Members
  • 9 posts

Posted 25 October 2010 - 12:38

Hallo Stefan,

in meinem von einer Uralt-IS-Version nach IS2009Pro migrierten ISM kommt RemoveExistingProducts direkt vor CostInitialize.
Findet RemoveExistingProducts üblicherweise später statt?
Schlägst Du vor, RemoveExistingProducts nach hinten, hinter CostFinalize zu verschieben?

Ich habe es zwischenzeitlich anders gelöst:
in einer kleinen Konsolen-App wird das entsprechende Windows-Unterverzeichnis ermitteln und dann per CreateProcess die cmd.exe gestartet, um copy in diesem Unterverzeichnis durchzuführen.

Diese Konsolen-App wird per CustomAction Typ 66 gestartet, was auch zu diesem frühen Zeitpunkt kein Problem darstellt.

Das Restore und Delete der zuvor gesicherten Datei findet dann zu einem viel späteren Zeitpunkt (irgendwo hinter InstallFinalize) weiterhin mit CustomAction Typ 98 statt, mit direktem Aufruf der cmd.exe samt copy bzw. del.

Edited by Toto, 25 October 2010 - 12:48.

Best Regards / Mit freundlichen Grüßen
Andreas Marschall

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 27 October 2010 - 18:02

QUOTE
Schlägst Du vor, RemoveExistingProducts nach hinten, hinter CostFinalize zu verschieben
Ja. Laut http://msdn.microsof...7(v=VS.85).aspx sollte es zwischen InstallValidate und InstallInitialize liegen und laut http://msdn.microsof...6(v=VS.85).aspx sollte InstallValidate nicht vor CostFinalize liegen.
Wenn du eine neues Projekt anlegst, siehst du die Standard-Reihenfolge die InstallShield verwendet (bestimmte Variationen sind allerdings erlaubt).