Announcement

Collapse
No announcement yet.

.Net dll - COM Register

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • .Net dll - COM Register

    Hallo,

    ich bin gerade dabei ein Programm zu schreiben, welches diverse dlls (werden an das Programm übergeben...) als COM registriert.
    Ich habe bisher die RegAsm.exe als System.Diagnostics.Process eingebunden und benutze diese mit den üblichen Aufruf:
    regAsm.exe regDestination.Dll /tlb
    Funktioniert super.

    Mein Problem vor dem ich nun stehe ist, dass ich die Registrierung gern mittels System.Runtime.InteropServices.RegistrationService s.RegisterAssembly durchführen möchte (1. um mir das Mitschleifen der RegAsm.exe zu sparen und 2. soll die Registrierung und alles drumrum demnächst auch Usern ermöglicht werden, die keine Admin-Rechte besitzen).
    Ich mache nun folgendes:
    Code:
    Assembly a = Assembly.LoadFrom(pSourcePathFile);
    System.Runtime.InteropServices.RegistrationServices rs = new System.Runtime.InteropServices.RegistrationServices();
    rs.RegisterAssembly(a, AssemblyRegistrationFlags.None);
    ConversionEventHandler eventHandler = new ConversionEventHandler();                        
    TypeLibConverter tlc = new TypeLibConverter();
    IUCOMICreateITypeLib typeLib = (IUCOMICreateITypeLib)tlc.ConvertAssemblyToTypeLib(a, regDestinationTlb, TypeLibExporterFlags.None, eventHandler);
    typeLib.SaveAllChanges();
    Es wird hierbei anscheinend alles ordungsgemäß durchgeführt, es wird eine tlb erstellt, etc. ABER in meiner Anwendung (Dynamics NAV) kann ich einfach keine Instanz meiner "dll" erstellen. Ich lese so oft, dass rs.RegisterAssembly(...) dasselbe macht wie RegAsm.exe...aber bei mir komme ich nicht auf dasselbe Ergebnis...hat jemand eine Idee bzw. einen Tipp?

    Danke und Gruß Marco

  • #2
    Welche Fehlermeldung erhälst du den beim Instanzieren eines Typen aus deiner Assembly?

    Wofür erstellst/brauchst du den noch die Typbibliothek(tlb) wenn du doch schon vorher die Assembly selbst registriert hast?

    Wieso mußt du die RegAsm mitschleifen? Die gehört zum Framework. Überall wo das Framework installiert ist existiert auch die RegAsm.

    Das du die Notwendigkeit von Adminrechten umgehen kannst bezweifel ich. Die Registrierung schreibt in den HKEY_CLASSES_ROOT Hive der Registry. Da muß man entsprechende Rechte haben egal über welchen weg man da drin rumpfuscht.

    Mit der Option /regfile von RegAsm könntest du dir übrigens das entsprechende Regfile erstellen und dieses einfach auf dem Zielrechner in die Registry einspielen.

    Comment


    • #3
      Hallo,

      vielen Dank erstmal für die schnelle Antwort!

      > Welche Fehlermeldung erhälst du den beim Instanzieren eines Typen aus deiner Assembly?
      Ich komme gar nicht erst dazu meine Assembly als Variable anzulegen, da diese nicht gefunden wird. Ich denke, dass die Registrierung (trotz nicht vorhandener Fehlermeldung) daher nicht geklappt hat!?

      > Wofür erstellst/brauchst du den noch die Typbibliothek(tlb) wenn du doch schon vorher die Assembly selbst registriert hast?
      Dynamics-NAV kann ohne die tlb nicht arbeiten, daher ist diese von Nöten...soweit ich das jedenfalls weiß.

      > Wieso mußt du die RegAsm mitschleifen? Die gehört zum Framework. Überall wo das Framework installiert ist existiert auch die RegAsm.
      Hmm, ich hatte schon Rechner, auf denen ich die RegAsm.exe nicht gefunden habe, trotz installiertem Framework.

      > Das du die Notwendigkeit von Adminrechten umgehen kannst bezweifel ich. Die Registrierung schreibt in den HKEY_CLASSES_ROOT Hive der Registry. Da muß man entsprechende Rechte haben egal über welchen weg man da drin rumpfuscht.
      Das war vielleicht kompliziert ausgedrückt: ich muss später den Code in meinem Programm unter einem anderen Benutzer (mit Admin-Rechten) ausführen. Das funktioniert soweit auch schon, nur der Aufruf der RegAsm mit dem anderen Benutzer führt zu Fehlern. Deshalb würde ich gern auf beschriebene Methoden zurückgreifen!!

      > Mit der Option /regfile von RegAsm könntest du dir übrigens das entsprechende Regfile erstellen und dieses einfach auf dem Zielrechner in die Registry einspielen.
      Das Problem ist, dass sich die dlls teilweise recht häufig ändern und dann auf über 100Rechnern registriert werden müssen. Die Verteilung geschieht daher automatisch (durch mein Programm).

      Comment

      Working...
      X