Dll's regisitrieren
Posted 08 April 2009 - 15:10
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
Posted 08 April 2009 - 15:33
Ich registriere meine DLL`s alle über eine "ComServer Component", dieses geht am schnellsten über den "Component Wizard"
Gruß Timo
Posted 09 April 2009 - 07:27
Posted 09 April 2009 - 07:40
Posted 10 April 2009 - 12:23
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.
Posted 17 April 2009 - 08:18
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.
Posted 17 April 2009 - 09:30
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.
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.
Posted 17 April 2009 - 10:00
Posted 17 April 2009 - 10:27
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.
Posted 17 April 2009 - 13:20
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.
Posted 20 April 2009 - 07:01
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.
Posted 20 April 2009 - 13:10
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
Posted 20 April 2009 - 13:27
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?
Posted 20 April 2009 - 13:35
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.
Posted 20 April 2009 - 13:45
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.
Posted 20 April 2009 - 15:13
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.
Posted 21 April 2009 - 07:00
...
_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?
Posted 21 April 2009 - 07:55
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.
Posted 21 April 2009 - 11:26
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.
Posted 21 April 2009 - 12:28
Vielen Dank für deine Geduld :-)
Posted 22 April 2009 - 08:41
Posted 23 April 2009 - 10:02
Hat jemand eine Ahnung woran das liegen konnte?
Posted 12 May 2009 - 09:11
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.
Posted 14 May 2009 - 07:33
Posted 26 May 2009 - 12:42
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
Posted 26 May 2009 - 13:08
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!
Posted 26 May 2009 - 14:06
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.
Posted 28 May 2009 - 12:48
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.
Posted 02 June 2009 - 13:07
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