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

Reihenfolge DLL Regisitrierung


10 replies to this topic

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 14 October 2011 - 11:57

Hi

Ich habe schon sehr oft DLLs registriert. Immer ohne Probleme. Jetzt sagt mir aber mein Installer das er eine DLL nicht registreiren kann. Wenn ich es manuell mach nachdem die Datein kopiert sind geht es. Das Problem ist das zu dem Zeitpunkt schon andere DLLs vorhanden sein müssen. Kann man da eine Reihenfolge angeben?

Lg
Sunflower84

Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 14 October 2011 - 14:05

Eigentlich sind beim Ausführen der Registrierung schon alle Dateien installiert!

Die "SelfRegModules action" muss nach der "InstallFiles action" ausgeführt (...If an InstallFiles action is used, it must appear before the SelfRegModules action in the sequence....).

Insofern kann es eigentlich nicht daran liegen, dass nicht alle Dateien vorhanden sind.

Die anderen DLLs aus der Installation können registriert werden? Liegen alle DLL in dem gleichen Ordner (evtl. werden benötigte Dateien nicht gefunden)?
Prüfe z.b. mal mit dem Dependeny Walker welche DLL Dateien die betroffene Datei ggf. noch benötigt/lädt.

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 14 October 2011 - 14:32

Dependency walker habe ich auch schon benutzt. Stimmt alles. Ich mache das auch nicht das erste mal. Hatte noch nie Problemem damit. Files sind alle da. Und manuell geht es ja auch.
Ich registriere auch noch eine Menge anderer DLLs da funktioniert es ja auch. Hast du noch eine Idee?
Ist irgendwie komisch. Habe sonst keine Idee mehr momentan.

Das ist übrigens ein .ax file.

Lg

Edited by Sunflower84, 14 October 2011 - 14:40.


Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 14 October 2011 - 15:09

Wir hatten vor kurzem auch ein Problem mit dem Aufruf einer DLL.

Der Aufruf der Funktion "UseDLL" aus dem Script herraus schlug fehl. Die DLL und die von der DLL benötigten Dateien lagen alle im Temp Ordner. Eine Überprüfung der DLL mit dem "Dependency walker" ergab keinen Fehler.

Als Ursache ergab sich schließlich, dass das aktuelle Verzeichnis während der Installation ein anderes war. Es wurde versucht die DLL zu laden, aber die abhängigen Dateien konnten nicht geladen/gefunden werden. In unserem Fall brachte ein "ChangeDirectory" vor dem Laden der DLL abhilfe.

Darum auch meine Frage, wo deine DLL und die abhängigen Dateien liegen. Wenn Windows nicht in diesem Ordner sucht, könnte es zu Problemen führen (Datei kann nicht geladen und damit auch nicht registriert werden). Windows hat ja eine festgelegte Suchreihenfolge wo DLL Dateien etc. gesucht werden.



Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 15 October 2011 - 12:18

Ich weiß nicht ob ich das richtig verstanden habe aber nach der Installation liegt alles genau da wo es liegen soll. Ich kann das ja auch nach der Installation manuell registrieren. Ohne Probleme.
Die ax datei die nicht registriert werden kann liegt in dem gleichen Ordner wie die abhängigen DLLs.
Oder was meinst du genau?

Muss je das Verzeichnis nicht wechseln wenn die Dlls alle da liegen wo sie sein sollen, oder?

Lg

ali

ali
  • Full Members
  • 1,008 posts

Posted 17 October 2011 - 13:12

Du registrierst deine DLL's über eine der SelfReg_Tables?!
Da gibt es mit IS 2 mögliche Wege, einmal über die SelfReg-Table oder über die ISSelfReg-Table(InstallShield).
Evtl. hast du ein Update von IS eingespielt, und deine Voreinstellung ging verloren. Die Einstellung kann in IS unter Options->Preferences vorgenommen werden. Wenn man die Voreinstellung ISSelfreg verwendet, kann man in der ISSelfReg Table im DirectEditor in der Spalte 'Order' die Reihenfolge angeben, in der die DLL's registriert werden sollen.
Da ich nur über "COM Extract at build" verwende, kann ich dir nicht 100% bestätigen, dass das praktisch auch so funktioniert, in der Hilfe ist es so beschrieben.
gruß

Edited by ali, 17 October 2011 - 13:12.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 18 October 2011 - 09:36

Danke für den Hinweis. Aber das ist es leider nicht.
Es steht wie immer auf ISSelfReg und die Reihenfolge habe ich auch schon angegeben.
Leider ohne Erfolg. Ich glaube momentan auch nciht mehr das es an der Reihenfolge liegt da alle files bereits im Ordner liegen wenn sie registriert werden.
Kann es sein das es andere Gründe gibt warum genau dieses File durch den Installer nicht installiert werden kann? Alle anderen gehen ja auf die gleiche Art und Weise.


Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 20 October 2011 - 07:41

Wir hatten folgendes Problem mit UseDLL:
Die DLL Test.dll sollte mit UseDLL geladen werden. die Test.dll und die abhängigen MFC DLL lagen alle in einem Ordner (z.B. c:\dummy)
UseDLL(c:\dummy\test.dll) aus dem Skript heraus schlug fehl, obwohl alle notwendigen Dateien in dem Ornder c:\dummy vorhanden waren. Ein Laden/Öffnen der test.dll mit dem Dependeny Walker war aber problemlos möglich.

Ein Aufruf mit UseDLL aus dem Installationsscript während Instalaltion war erst möglich, als vorher ChangeDirectory(c:\dummy) ausgeführt worden war.
Da der Ordner c:\dummy nicht der aktuelle Ordner war und der Ordner auch nicht im Suchpfad von Windows lag, wurden die abhängigen Datien nicht gefunden. Windows sucht ja zuerst im aktuellen Ordner, dann kommen die Systemordner dran und dann auch noch alles aus der PATH Variablen (oder so ähnlich).

Da ich nicht sagen kann, wie IS die Registrierung der DLL durchführt, wäre es also denkbar, dass die abhängigen Dateien nicht gefunden werden.

Aber dass kann man ja testen. Installiere die Datei (und die abhängigen Dateien) mal Testweise ins Windows-System Verzeichnis (oder in ein Verzeichnis das in der PATH Variable enthalten ist.. Das wird auf der Suche nach Dateien immer durchsucht.
Wenn die Registrierung dann klappt hast du ja die Ursache....falls nicht vergesse meine Ausführungen wink.gif

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 20 October 2011 - 13:04

Danke für den Hinweis. Aber das war es leider nicht :-(

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 25 October 2011 - 14:35

Also eigentlich sollte man die COM-Informationen vorher (beim Hinzufügen der DLL oder beim Build) extrahieren. Dann kann Windows Installer die Daten direkt in die Registry schreiben ohne auf dem Zielcomputer die Selfreg Funktion des DLL augzurufen. Dieses Verfahren wurde genau deshalb eingeführt, um solche Abhängigkeits- und Reihenfolge-Probleme zu vermeiden.

Wenn das aus irgendeinem Grund nicht in Frage kommt: Lass mal den Process Monitor von SysInternals mitlaufen. Er zeigt an, auf welche Dateien und Registryeinträge zugegriffen wird (hier würde man z.B. einen falschen Pfad sehen) und auch das Ergebnis (z.B. Zugriff verweigert, was auf ein Rechteproblem hinweisen würde).

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 15 November 2011 - 15:45

Danke dir. Aber der Entwickler der DLL hat jetzt ein paar Funktionen entfernt die sowieso bei uns nicht gebraucht werden. Seitdem funktioniert es