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

Dll's regisitrieren


31 replies to this topic

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 08 April 2009 - 15:10

Hallo

Ich habe zwei Komponenten bei denen Dll's regisitriert werden müssen. Ich habe schon das Häckchen gesetzt bei "selbst registrieren". Wenn ich das MSI jetzt ausführe erscheinen zum Schluss für jede DLL ein Fenster mit der Meldung das die DLL nicht registriert werden konnte. Hat jemand eine Idee was ich noch ändern muss?

Liebe Grüße
Sunflower84

tleonhard

tleonhard
  • Full Members
  • 59 posts

Posted 08 April 2009 - 15:33

Hi,

Ich registriere meine DLL`s alle über eine "ComServer Component", dieses geht am schnellsten über den "Component Wizard"

Gruß Timo



Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 09 April 2009 - 06:50

Danke. Und wo finde ich den Wizard und wie gehe ich da vor?

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 09 April 2009 - 07:27

Hab den Assistenten gefunden. Aber jetzt bekomme ich zu jeder Komponente folgende Fehlermeldung: Weder abhängige Datei Microsoft.DirectX.Direct3DX noch eine ihrer Abhängigkeiten von Komponente XXX.dll wurden gefunden


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 09 April 2009 - 07:40

Die Meldung kommt nicht mehr wenn ich .NET Suche bei Erstellung auf "keine" setze. Aber es funktioniert immer noch nicht. Bekomme immer noch die Meldung das die DLL's nicht registriert werden können. Bin einfach auf den Komponenten Assistent, habe als Typ COM-Server ausgewählt und die DLL's hinzugefügt. Danach bin ich mit rechtklick auf die DLL und habe das Häckchen bei selbstregistrierend gesetzt. Habe ich da was falsch gemacht?

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 10 April 2009 - 12:23

Ich sollte vielleicht dazu sagen das es sich um DLL's für eine .NET Komponente handelt. Bei den anderen DLL's funktioniert es nämlich wenn ich selbstregistrierend aktiviere.

Also ich habe insgesamt 3 DLL's die registriert werden müssen. Ich habe jetzt für jede DLL eine Komponente hinzugefügt. Zu jeder Komponente eine Assembly erstellt. In der Tabelle MsiAssembly stehen alle DLL's drin. Selbstregistrierend habe ich nicht aktiviert weil ich eine Fehlermeldung bekomme das die DLL's nicht registriert werden können. Hat jemand noch eine Idee was ich falsch gemacht habe?


Liebe Grüße
Sunflower84

Edited by Sunflower84, 15 April 2009 - 08:22.


ali

ali
  • Full Members
  • 1,008 posts

Posted 17 April 2009 - 08:18

Hallo Sunflower84,

das Häkchen bei selbstregistrieren zu setzen ist eigentlich nicht mehr notwendig und sollte meines wissens auch nicht mehr verwendet werden. Schau mal deine Validierung an. Wenn du dies wieder zurücksetzt, und in der entsprechenden Komponenteneinstellung "COM-Extraktion bei Erstellung" auf "Ja" setzt, werden die RegInfos bei der Erstellung des Setups extrahiert. Man kann dies auch statisch über den Koponentenassistenten tun, das hat aber den Nachteil, das der InstallShield es nicht mit bekommt wenn sich RegInfos ändern. Durch das dynamische Auslesen der RegInfos wird immer bei der Erstellung die aktuelle Komponente ausgelesen.
Für .NET Komponenten funktioniert das an dieser Stelle nicht, hier solltest du mal in der Komponenteneinstellung die Funktion ".NET COM-Interop" für deine .NET Komponente aktivieren.

Wichtig ist hier natürlich, das du jede DLL einer eigenen Komponente zugeordnet hast und diese Schlüsseldatei der Komponente ist.

Wichtig ist auch, das du in deinem InstallShield Projekt unter Extras -> Optionen -> .NET den Pfad zur RegAsm.exe und der InstallUtilLib.dll auf das aktuell benötigte .NET Framework Verzeichnis setzt. Die Extraktion der Infos funktioniert sonst evtl. nicht.

Edited by ali, 17 April 2009 - 08:27.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 17 April 2009 - 09:30

Danke für dein Antwort.
Also ich habe eine Komponente in der eine dll enthalten ist. Diese Datei ist als schlüsseldatei definiert. Leider bekomme ich aber im Kontextmenü der DLL die Funktion "Extract COM Data for key file" immer noch ausgegraut angezeigt. In der Hilfe steht, dass die Datei als Schlüsseldatei festgelegt werden muss und das sie selbstregistrierend sein muss. Kann es sein das die datei nicht selbstregistrierend ist?
In den Optionen ist soweit alles richtig eingestellt.
Eigentlich brauche ich meines Wissens keine .NET Assemlby.
.NET Com Interop habe ich schon die ganze Zeit aktiviert. Wenn ich das Häckchen bei selbstregistrierend raus nehme, kommt zwar keine Meldung mehr das die Datei nicht registriert werden kann aber leider wird die DLL trotzdem nicht registriert.
Was meinst du denn mit Validierung?

In meinen Eigenschaften der Komponente steht alles auf NEIN außer .NET COM-Interop und die Anwendungsdatei beinhaltet den Pfad zu meiner dll.
.NET-Suche bei Erstellung: keine.
Muss ich da vielleicht noch was ändern?
Liebe Grüße
Sunflower84

Edited by Sunflower84, 17 April 2009 - 09:34.


ali

ali
  • Full Members
  • 1,008 posts

Posted 17 April 2009 - 09:39

QUOTE
werden muss und das sie selbstregistrierend sein muss

das siehst du doch in den Eigenschaften der DLL ob diese Infos zur Selbstregistrierung hat. Im Windows Explorer Dateieigenschaften -> Version -> Schauen obs einen Elementname OleSelfRegister gibt.
Wurden die Infos evtl. schon mal statisch ausgelesen? Evtl. die Komponente mal neu anlegen, das diese Funktion ausgegraut ist, kenne ich nicht. Ist bei mir immer verfügbar.

QUOTE
Eigentlich brauche ich meines Wissens keine .NET Assemlby.
.NET Com Interop habe ich schon die ganze Zeit aktiviert.

Was willst du dann registrieren, wie führst du das Registrieren der .NET Assembly manuell aus?
Hast du mal die Einstellungen im InstallShield überprüft.

Edited by ali, 17 April 2009 - 09:40.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 17 April 2009 - 10:00

Die DLL ist selbstregistrierend. Außerdem funktioniert es auch wenn ich das batchfile ausführe. In diesem Batchfile registriere ich die DLL mit regasm. Das funktioniert auch. Ehrlich gesagt weiß ich nicht so genau ob ich eine .NET Assembly brauche. Ich habe gedacht es geht genua so wie bei den anderen dll's. Einfach nur das Häckchen bei selbstregistrierend setzen. Kannst du mir sagen ob ich eine Assembly brauche?


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 17 April 2009 - 10:27

Äh, stopp. Die DLL ist nicht selbregistrierend. In der DateiInfo steht nicht OleSelfRegister. Gibt es da noch eine andere Möglichkeit die DLL zu registrieren?

ali

ali
  • Full Members
  • 1,008 posts

Posted 17 April 2009 - 13:16

QUOTE
Die DLL ist selbstregistrierend. Außerdem funktioniert es auch wenn ich das batchfile ausführe. In diesem Batchfile registriere ich die DLL mit regasm

Ok, das heißt du kannst deine Assembly mit regasm registrieren und das tut. Das selbe tut COM Interop auch, d.h. dur wirst ein Problem mit der .NET Version haben, die ich oben schon gespostet habe. Standard ist eingestellt, das regasm von .NET 1.1 verwendet ist. Aus welcher .NET Version ziehst du dein regasm. Schau ins Batchfile und suche den Zielpfad der regasm.exe. Trage dann den Pfad in das .NET Konfig Menü von InstallShield ein. s.o.

bzgl. deiner anderen dll gib mal ein im Start-> Ausführen Fenster

regsvr32.exe %PfadzudeinerDll%\deine.dll

dann wirst du erfahren ob deine DLL registriert werden muss.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 17 April 2009 - 13:20

Ok, danke das werde ich mal versuchen.
Ja, die DLL muss registriert werden sonst funktioniert der Client nicht.
Muss ich das Häckchen trotzdem bei "selbstregistrierend" aktivieren oder nicht? Im Bacthfile steht dieses Framework: Microsoft.NET\Framework\v2.0.50727
Im Release ist 2.0 ausgewählt.

Edited by Sunflower84, 17 April 2009 - 13:25.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 20 April 2009 - 07:01

Geht leider nicht.
In den .NET Optionen steht genau der Pfad drin der auch im Batch file ist. Die Datei habe ich momentan noch selbstregistrierend. In den EInstellungen habe ich bei der Komponente die Eigenschaft ".NET Suche bei Erstellung" auf Abhängigkeiten und Eigenschaften stehen. Die Datei ist keine Schlüsseldatei. Als Schlüsseldatei kann ich die Datei nur definieren wenn ich die Einstellung ".NET Suche bei Erstellung" auf "keine" setze. Ansonsten stürzt mir das INstallShield beim Erstellen des Release ab und es steht folgendes im Logfile:
Eine oder mehrere Komponenten des Projekts enthalten .NET-Eigenschaften, die das .NET Framework erfordern. Wir empfehlen, dem Release das .NET Framework hinzuzufügen.
Wenn ich nur "Eigenschaften" auswähle bekomme ich keine Fehlermeldung aber es funktioniert leider nciht.
In den Releaseeinstellungen habe ich bei ".NET Frameworkverzeichnis" "Vom Quellmedium kopieren" ausgewählt. .NET Frameowrk Verzeichnis steht auf .NET 2.0.
Hab ich jetzt noch was vergessen?

Edited by Sunflower84, 20 April 2009 - 07:37.


ali

ali
  • Full Members
  • 1,008 posts

Posted 20 April 2009 - 13:10

Hallo,

in deinen .NET Optionen steht also als Pfad
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
und
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\InstallUtilLib.dll

Verzeichnis kann WINNT oder Windows ein, musst du schaun.

Die ".NET Suche bei Erstellung" steht auf "Nur Eigenschaften"

Bei ".NET Anwendungsdatei" ist besagte Dll angegeben.

Die DLL in der Komponente MUSS Schlüsseldatei der Komponente sein.

Selbstregistrierung brauchst du nicht.

Der Compiler bring keine Fehler bei der Releaseerstellung und nur die Warung das .Net hinzugefügt werden soll.

Die MSI Valididerung ist OK

Besagte .Net Runtime ist auf dem testsystem installiert.

Wenn es dann nicht geht, weiß ich auch nicht mehr weiter, evtl testsystem neu aufsetzen.

Wenn dein InstallShield bei "Suche nach Abhängigkeiten" abschmiert, würde ich mal testen ob IS überhaupt korrekt installiert ist



Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 20 April 2009 - 13:27

Hab ein ServicePack von Acresso installiert. Jetzt stürzt das Programm nicht mehr ab. Jetzt kann ich auch "Abhängigkeiten und Eigenschaften" auswählen ohne das er abstürzt. Nach dem Kompilieren kam jetzt die Meldung das DirectX fehlt die eine Komponente braucht. Hab ich nun installiert und jetzt kommt keine Meldung mehr. Leider klappt es aber immer noch nicht. Wenn ich eine statische Suche durchführe bekomme ich auch keine Fehlermeldung.
Der Pfad zu den .NET Optionen stimmt. Die DLL die registriert werden muss habe ich als Schlüsseldatei definiert und nicht selbstregistrierend. Die anderen DLL's die nicht registriert werden müssen habe ich eine dynamische Dateiverknüpfung.
.NET Runtime ist auf dem Testsystem installiert.
Was meinst du mit MSI Validierung?

ali

ali
  • Full Members
  • 1,008 posts

Posted 20 April 2009 - 13:35

.Net Interop steht auf Ja?
Die DLL wird auch installiert?

Mit Validierung meine ich unter "Erstellen -> Validieren -> Alle Testst der MSI Validation Suite".

Evtl. auch mal ein Installationslog mit /L*V anfertigen und schauen ob da Probleme auftreten.

Edited by ali, 20 April 2009 - 13:36.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 20 April 2009 - 13:45

.NET Interop steht auf JA.
Hab die Valdierung gerdae gemacht und ein Haufen Fehler:
Jeder Fehler fängt an mit "Not a valid foreign key, Table: MsiAssembly, Column:Feature_,Key(s): MACommon.dll MsiAssembly...
Das passiert anscheind bei jeder DLL.
Habe kein Assembly erstellt. Was kann ich da ändern?
In der Tabelle MsiAssembly im Direct Editor sind keine Einträge.
Die Datein werden in den richitgen Ordner installiert. Nur muss jetzt noch eine DLL registriert werden. Wenn ich das InstallShield ausführe und danach das batch file mauell ausführe funktioniert alles. Also die benötigten DLL's liegen an der richtigen Stelle.

ali

ali
  • Full Members
  • 1,008 posts

Posted 20 April 2009 - 15:13

du musst die Tabelle ansehen, nachdem das Release erstellt ist. Schau das erzeugte MSI an indem du es mit InstallShield öffnest.

Steht im LogFile der Releaseerstellung irgendwo (ziemlich am Ende)"COM .NET Interop-Informationen für Komponenten werden erstellt" ?

Die o.g. Fehler solltest du korrigieren, schau mal unter ICE03 nach (Acresso):
http://www.installwo...tent&Itemid=138

Wenn du die Fehlermeldung im Validierungslog doppelt anklickst, wird die entsprechende fehlerhafte Zelle im Direkt Editor rot markiert.

PS:Ich gehe davon aus, das nix manuell in Tabellen eingtragen wurde. Die Einträge werden von IS beim Erstellen des Release automatisch erzeugt.

Edited by ali, 20 April 2009 - 16:19.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 21 April 2009 - 07:00

Ja das steht im Logfile:
...
_Validation-Tabelle erfolgreich erstellt
COM .NET Interop-Informationen für Komponenten werden erstellt
Projekt wird nach Komponenten zum Extrahieren bei Build durchsucht...
Durchsuchte MsiAssembly-Datensätze werden erstellt
Durchsuchte MsiAssemblyName-Datensätze werden erstellt
Einreihung der benutzerdefinierten Aktion wird validiert
Dialogfeld 'AdminChangeFolder' für Sprache 'Englisch (USA)' erzeugt
...

In den Tabellen MsiAsembly und MsiAssembly steht nichts drin. Sollte da nicht normal was drin stehen?
Das einzige was mir im Direct Editor rot markiert wird ist ein Dialog den ich mal hinzugefügt habe aber nicht benutze. Mehr nicht.
Kann es sein das die Einträge im Direct Editor nicht gemacht werden?


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 21 April 2009 - 07:55

Danke ali für deine Hilfe.
Hab jetzt nochmal ein neues Projekt erstellt. Jetzt bekomme ich nur noch ein paar Warnungen bezüglich eines Mime Types. Was ich nicht verstehe. Weil das mit dem Mime Type funktioniert. Und noch ein paar Warnungen wegen einem Dialog den ich nicht benutze. Ich verstehe einfach nicht warum die DLL nicht registriert werden kann.
Kann ich denn vielleicht einfach das Batchfile nach der Installation vom MSI ausführen lassen.
Hab jetzt nochmal eine statische Suche durchgeführt. Er sagt mir dann das er keine Abhängigkeiten mehr finden kann.
Sollte nicht eine Assembly hinzugefügt werden wenn ich eine statische Suche durchgeführt habe?
Hat noch jemand eine Idee?

Edited by Sunflower84, 21 April 2009 - 10:37.


ali

ali
  • Full Members
  • 1,008 posts

Posted 21 April 2009 - 11:26

schaust du in deinem erstellten MSI nach dem compilieren oder im Projekt.

Wenn du nach dem erstellen des Release die MSI Datei mit IS öffnest. Sollten Einträge in der MsiAssembly Table sein. Weiter sollten die Registrierungsinformationen in der Tabelle Registry stehen, wo die entsprechenden Einträge mit der Komponente (also der DLL) verknüpft sind.

Edited by ali, 21 April 2009 - 11:26.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 21 April 2009 - 12:28

Wenn ich das erstellte MSI mit InstallShield öffne dann sind in der MSIAssembly jede Menge Einträge da. In der Registry Tabelle auch. Die DLL die registriert werden soll ist auch vorhanden. Aber es funktioniert immer noch nicht. Eigentlich ist es doch nicht so schwer so eine DLL zu registrieren, oder? Was habe ich denn noch vergessen?
Vielen Dank für deine Geduld :-)

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 22 April 2009 - 08:41

Danke für eure Hilfe. Liegt anscheind an der DLL. Bei einer anderen Komponente funktioniert es.

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 23 April 2009 - 10:02

Bei der anderen Komponente wo die Registrierung funktioniert klappt das deregistrieren bei einer DLL nicht. Im Batch werden mehrere DLLs deregisrtiert. Mit regsvr32 werden die DLLs im Batchfile registriert. Die deregistrierung über das Batchfile funktioniert auch. Aber mit meinem MSI kann er eine DLL nicht deregistrieren. Da erscheint dann eine Fehlermeldung das die DLL nicht deregistriert werden kann.
Hat jemand eine Ahnung woran das liegen konnte?

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 12 May 2009 - 09:11

Muss vielleicht eine bestimmte Sequenz für dieses Verfahren integriert werden? Es sollen nur 3 DLL'S registiriert werden (.NET Komponente)
Wenn ich das Batch file ausführe nachdem ich es mit meinem MSI installiert habe funktioniert alles.
In dem Batchfile werden nur 3 DLL's regisitriert.
Wenn ich "vorkompilierte .NET Assembly" auf "Ja" setzte bekomme ich im Logfile von ngen.log Warnungen das einige Abhängigkeiten nicht gefunden werden können.

Edited by Sunflower84, 12 May 2009 - 12:44.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 14 May 2009 - 07:33

Kann es vielleicht an den DLLs liegen? Hab jetzt ein neues Projekt angelegt mit nur einem Feature in der die DLLs registriert werden müssen aber es funktioniertt immer noch nicht.

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 26 May 2009 - 12:42

Folgendes steht in der Batch Datei (Wenn ich diese ausführe funktioniert es):

set FRAMEWORK_DIR="%WINDIR%\Microsoft.NET\Framework\v2.0.50727"
set REGASM="%FRAMEWORK_DIR%\regasm.exe"

set CWD=%~d0%~p0
%REGASM% %* /codebase "%CWD%ErsteDLL.dll" ErsteDLL
%REGASM% %* /codebase "%CWD%ZweiteDLL.dll" ZweiteDLL
%REGASM% %* /codebase "%CWD%DritteDLL" DritteDLL

In der Registerkarte der .NET Optionen stehen diese Pfade:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtilLib.dll

Im Release ist .NET Framework 2.0 ausgewählt.

Es gibt unter anderem 3 Komponenten die jeweils eine der DLL enthalten und als Schlüsseldatei definiert sind und nicht selbstregistrierend sind.
Bei jeder der 3 Komponeneten steht .NET COM-Interop auf "Ja".

Was fehlt denn da noch? Wenn ich das mit meinem MSI installiere und zum Schluss das Batch file ausführe funktioniert es ja.
Es liegt nur an der Registrierung.

Liebe Grüße
Sunflower84




ali

ali
  • Full Members
  • 1,008 posts

Posted 26 May 2009 - 13:08

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
Wenn du du in den Optionen auf den Folder Button klickst, bekommst du dann sofort die Regasm.exe zur Auswahl angeboten?

sind Entwicklungsrechner und Testrechner gleich?

Fehlen evtl. die Rechte um RegAsm.exe auf dem Entwicklungsrechner auszuführen?
Ich weiß nicht wie IS reagiert in solchen Fällen, wäre evtl. ne Idee!

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 26 May 2009 - 14:06

Regasm.exe wird sofort ausgewählt wenn ich auf den Ordner klicke.

Habe es jetzt mal versucht das MSI auf dem Entwicklungsrechner auszuführen. Leider das gleiche Problem. Habe es schon auf mehreren Rechnern versucht.

Hatte überall Admin Rechte.
Das kann doch wirklich nicht so schwer sein. Bin echt schon am verzweifeln :-( Trotzdem Danke.
Vielleicht hat ja noch jemand eine Idee.

Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 28 May 2009 - 12:48

Hab jetzt nochmal ein neues Projekt erstellt und alle Komponenten neu angelegt.
Wenn ich den Client jetzt öffne erscheint folgende Fehlermeldung: "Could not load file or assembly..."
Und ganz unten in der Exception noch folgende Warnung:
"Assembly binding logging is turned off..."
Auch wenn ich das Batchfile manuell aufrufe funktioniert es nicht mehr.
Vielleicht weiß ja jemand woran das liegt. (Hab alles so konfiguriert wie oben in der kurzen Zusammenfassung)

Liebe Grüße
Sunflower84

Edited by Sunflower84, 28 May 2009 - 12:48.


Sunflower84

Sunflower84
  • Full Members
  • 121 posts

Posted 02 June 2009 - 13:07

Ich weiß jetzt woran es liegt. Die ganze Zeit habe ich versucht mit dem IE7 den Client zu öffnen. Mit IE6 erscheint eine Meldung, dass es Probleme mit dem ActiveX Control gibt. Wenn ich in den Sicherheitseinstellungen des IE die Einstellung "Initialize and script ActiveX controls not marked as safe for scripting" auf "Enable" setze funktioniert es. Unter IE6 und IE7.
Kann ich irgendwie diese Einstellung automatisch setzten wenn ich mein MSI ausführe? Der default steht leider auf "disabled". Jedes mal manuell umstellen ist auch blöd.

Liebe Grüße
Sunflower84