COM Objekt (dll) ohne Regasm in NAV verwenden?

4. August 2010 12:07

Hallo Zusammen,

ich hab eine dll geschrieben, welche ich mit NAV verwende.
Das klappt auch ganz gut mit NAV. Aber mein Problem ist das ich bei den Kunden-PCs ja immer per regasm und der NAVautomation.tlb
die Registrierung der dll als COM-Objekt machen muss damit NAV darauf zugreifen kann.

Im .Net Framework 3.5 gibt es doch eigentlich die Möglichkeit über folgenden Code das zu automatisieren:

Assembly assembly = Assembly.LoadFrom("mydll.dll");
RegistrationServices regsrv = new RegistrationServices();
regsrv.RegisterAssembly(assembly, AssemblyRegistrationFlags.SetCodeBase);

In der Registry sind dann auch ein paar Einträge drin, aber NAV kennt meine dll trotzdem nicht (Sie erscheint einfach nicht).

Hat irgendjemand von euch eine Möglichkeit gefunden das ganze zu automatisieren?
Nur ungern würde ich die Registry-Einträge per Loginskript verteilen.

Ich dachte zB. an eine kleine Anwendung die ich mit dem obengenannten Code einfach auf die PCs inkl. meiner dll verteile und starte.
Aber es tut halt net :(

Wie macht ihr das?

grüße,
Coyote

Re: COM Objekt (dll) ohne Regasm in NAV verwenden?

5. August 2010 16:16

Hallo,

ich erinnere mich, dass jemand mal die dll als BLOB in der Datenbank abgelegt hat. Beim Aufruf prüft er vorher ob diese DLL auf dem Client registriert wurde, wenn nicht exportiert er die DLL aus dem BLOB auf den Client und registriert sie. Das alles per NAV Code.

War irgendwo bei mibuso oder msdynamics, habe es aber auf die Schnelle nicht gefunden.

Re: COM Objekt (dll) ohne Regasm in NAV verwenden?

5. August 2010 16:33

Alexander Broz hat geschrieben:War irgendwo bei mibuso oder msdynamics, habe es aber auf die Schnelle nicht gefunden.

Meintest du das hier?
http://www.navision24.de/downloads/date ... erung.html

Re: COM Objekt (dll) ohne Regasm in NAV verwenden?

5. August 2010 17:40

Über BLOBs funktioniert das, wie im Artikel angegeben, unter bestimmten Voraussetzungen. Allerdings für normale Benutzer nicht mehr unter Windows Vista oder Windows 7 (UAC). Insgesamt ist das auch ein eher schwindliges Verfahren.

Ich nutze Visual Studio Setup Projekte (MSI) und das automatische Deployment beispielsweise über Gruppenrichtlinien einer Domäne:

Erweitern des COM DLL Projekts durch ein Setup Projekt:

1. Menü File > Add > New Project… > Setup Project
2. Das Dateisystem des Setup-Projekts anzeigen (Rechtsklick Setup-Projekt > View > File System)
3. Im Filesystem den „Global Assembly Cache“ hinzufügen (Rechtsklick auf File System on Target Machine > Add Special Folder > Global Assembly Cache)
4. Project Output hinzufügen (Rechtsklick auf Application Folder > Add > Project Output > Primary Output)
5. Project Output ebenfalls für den „Global Assembly Cache“ durchführen (Rechtsklick Global Assembly Cache > Add > Project Output > Primary Output)
6. Für Project Output des „Application Folder“ (nicht GAC!) den Registrierungstyp auf vsdrpCOM stellen
7. InstallAllUsers des Setup-Projekts auf True stellen, damit automatisch immer für alle Benutzer installiert wird (Everyone)
8. Setup Projekt compilieren und Setup.exe inkl. *.msi Datei auf einem Zielrechner bereitstellen
9. Setup.exe auf dem Zielrechner ausführen.

Wichtig ist, dass nicht alle Informationen (die Infos zur Typbibliothek) auf dem Ziel erzeugt werden. Die Ausführung von Funktionen einer Automation sind möglich, der Typ der DLL/Automation wird allerdings als Unknown angezeigt. Deshalb ist auch das Compilieren der Objekte mit referenzierter Automation auf dem Zielrechner nicht möglich. Diese Informationen werden durch regasm.exe und dort den Parameter /tlb:filename.tlb auch auf dem Zielrechner erzeugt.