Office: Regfree COM / Side-by-Side

Helfe beim Thema Regfree COM / Side-by-Side in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo! Ich versuche eine .net-COM-dll über Regfree COM zu verwenden. Das klappt ohne Probleme in einem VB6-exe-Projekt, wenn ich eine Manifest-Datei... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Josef P., 16. Februar 2012.

  1. Regfree COM / Side-by-Side


    Hallo!

    Ich versuche eine .net-COM-dll über Regfree COM zu verwenden.
    Das klappt ohne Probleme in einem VB6-exe-Projekt, wenn ich eine Manifest-Datei erstelle.
    Ich kann die .net-COM-dll auch verwenden, wenn ich die msaccess.exe.manifest-Datei entsprechend anpasse. Das will (darf) ich aber nicht! *Smilie

    Kennt jemand einen anderen Weg, wie man für eine Access-Anwendung (accde, mde, ...) eine Manifestdatei aktivieren bzw. Regfree COM (.net-dll) verwenden könnte? (DirectCOM funktioniert bei mir nur mit VB6-COM-dlls.)

    /edit:
    folgendes probierte ich auch aus: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    ... klappt aber (noch) nicht.


    mfg
    Josef

    :)
     
    Josef P., 16. Februar 2012
    #1
  2. Für jene, die eine VB6-COM ohne Registrierung und ohne DirectCOM verwenden wollen:

    1. mit mt.exe eine Manifestdatei erstellen
    2. statt CreateObject("ComLib.Klassename") Microsoft.Windows.ActCtx verwenden und damit CreateObject aufrufen.
    Code:
    Im Anhang ist ein Beispiel mit einer VB6-COM-dll.
    Anm.: wenn man aus der COM-dll eine tlb erstellt, kann man sogar Early Binding verwenden.


    Jetzt wäre es noch schön, wenn das auch mit einer .net-COM-dll klappen würde.

    mfg
    Josef
     
    Josef P., 18. Februar 2012
    #2
  3. Hallo Josef,
    diese Aufgabenstellung und auch die genannten Restriktionen kommen mir sehr bekannt vor. *biggrin.gif*
    Leider habe ich bisher noch keine Lösung gefunden.*frown.gif*

    Dein Posting hat mich gestern dazu animiert, die Suche nach einer Lösung wieder aufzunehmen. Bisher habe ich zwar viele interessante Artikel gefunden - eine wirkliche Lösung habe ich aber leider noch nicht gesehen.

    CU
     
    Thomas Möller, 18. Februar 2012
    #3
  4. Regfree COM / Side-by-Side

    Hallo!

    Ich probierte mittlerweile die Variante mit Activation Context API unter VB6 aus. Das klappt auch mit der .net-COM-dll, solange die dll im Exe-Verzeichnis oder im System32-Verzeichnis liegt.
    Die Frage ist nun: wie schaffe ich es, dass die dll in einem anderen Verzeichnis gesucht wird? (Pfad zu einem Unterverzeichnis relativ zur exe klappt auch noch mit der VB6-COM-dll, wenn man das Unterverezcihnis in der Manifestdatei angibt. Mit der .net-COM funktioniert das nicht mehr.)
    ... Ein versuch per LoadLibrary brachte keinen Erfolg.
    Irgendwo (aber wo?) muss man das vermutlich in der Manifestdatei einstellen.

    mfg
    Josef
     
    Josef P., 18. Februar 2012
    #4
  5. Hallo!

    Zur Info: ich erstellte im MSDN-.NET-Forum einen Eintrag. Vielleicht haben die .NET-Profis eine Idee. *wink.gif*
    Wenn jemand von euch eine Idee hat, kann er das aber ruhig hier reinstellen *wink.gif*, ich werde das dann im anderen Forum nachtragen.

    mfg
    Josef
     
    Josef P., 19. Februar 2012
    #5
  6. Folgende Problemverschiebung würde funktionieren:
    Mit VB6 eine ActiveX-EXE erstellen und registrieren.
    Dann kann man über diese ActiveX-Exe Objekte aus den .net-COM-dlls laden.
    Kleiner Vorteil: Man muss nur einmal (bei der Erstinstallation der Anwendung) diese ActiveX-Exe registrieren und kann dafür die .NET-COM-dlls ohne COM-Registrierung verwenden.

    mfg
    Josef
     
    Josef P., 19. Februar 2012
    #6
  7. Hallo Josef,
    dieser kleine, zusätzliche Aufwand wäre zu verschmerzen - zumal er ja nur ein einziges mal anfällt.

    Hast Du das Vorgehen schon einmal ausprobieren können?

    CU
     
    Thomas Möller, 20. Februar 2012
    #7
  8. Regfree COM / Side-by-Side

    Hallo!

    Ja.
    ... und gleich (siehe Anhang) kannst du das auch. *wink.gif*


    Anm.:
    Die ActiveX-exe "ComLibStarter.exe" muss registriert werden. Dazu die Register.cmd (oder die Exe selbst) als Administrator ausführen.
    Die dll-Dateien müssen im Verzeichnis (oder bei VB6-COM in einem Unterverzeichnis) der ComLibStarter.exe liegen.

    mfg
    Josef
     
    Josef P., 20. Februar 2012
    #8
  9. Gibt es das noch mal in einfachen Worten an einem Beispiel erklärt?
    ( z.B. im Rahmen des Stammtisches )
     
    KGunder, 20. Februar 2012
    #9
  10. Hallo!

    Ich kann das von mir ausprobierte Vorgehen schon bei einem Stammtisch zeigen. Besonders spannend wird das vermutlich nicht. *wink.gif*
    Wir könnten uns aber bei einem "außerplanmäßigen" Live-Meeting über die Möglichkeiten einer Verwendung von .net-COM-dlls unter Access/VBA unterhalten.

    Zum Nachlesen ein paar Links:
    Simplify App Deployment with ClickOnce and Registration-Free COM
    Registration-Free Activation of COM Components: A Walkthrough
    Registration-Free Activation of .NET-Based Components: A Walkthrough

    http://bytes.com/topic/net/answers/8...ed-application
    http://stackoverflow.com/questions/4...ation-free-com

    mfg
    Josef
     
    Josef P., 20. Februar 2012
    #10
  11. Hallo Josef,
    Die Registrierung funktioniert. Auch die Tests lassen sich ausführen. *biggrin.gif*
    Das ist natürlich eine Einschränkung, die die Lösung schon fast wieder unpraktikabel macht. Wenn die ComLibStarter.exe registriert wird, dann wird diese Registrierung irgendwo in einem System-Ordner stattfinden. In einen solchen Ordner jetzt "beliebige" DLL-Dateien hineinzukopieren kann als aussichtsloses Unterfangen betrachtet werden.

    Ich habe dann etwas mit dem Code "gespielt". Dabei habe ich den Pfad für die Manifest-Datei angepasst:
    Code:
    Auf meinem System liegt die MDB und die Exe in folgendem Ordner:
    D:\Users\Thomas\Documents\Datenbanken\_Demo\RegFree

    Der Test mit ActCtx funktioniert dabei. Auf diesem Weg kann ich also den Speicherort der Manifestdatei beliebig festlegen. Die DLL muss dann im selben Ordner wie die Manifestdatei liegen.

    Dann habe ich den Test für dien ComStarter angepasst. Dort habe ich nicht nur den Namen der Manifestdatei sondern deren kompletten Pfad angegeben. Dies funktioniert leider nicht. Ich habe die Hoffnung, dass eventuell der ComStarter angepasst werden kann, so dass der komplette Pfad der Manifestdatei übergeben und verwendet werden kann.

    CU
     
    Thomas Möller, 20. Februar 2012
    #11
  12. Warum? Es könnte doch auch unter ProgramData o. ä. Orten sein. (Ich würde die exe direkt zur Access-Anwendung unterhalb ProgramData abspeichern.)
    Hast du das auch mit der .net-COM ausprobiert? Bei mir funktioniert das nicht - bzw. nur mit der VB6-COM-dll ... und für die muss ich den Umweg nicht über die ActiveX-exe gehen sondern kann direkt ActCtx verwenden.

    Du kannst übrigens auch den Pfad der dll im ComStarter einstellen.
    Code:
    mfg
    Josef

    PS:
    Noch ein Code-Auszug aus der ComStarter-Klasse:
    Code:
     
    Josef P., 20. Februar 2012
    #12
  13. Regfree COM / Side-by-Side

    Hallo Josef,

    ich habe das heute mal auf einem anderen Rechner getestet:
    Windows Server 2003, 64 Bit, SP2

    Ergebnis:
    - Die ActCtxTest schlagen fehl
    - Die ComLibStarterTests werden bestanden

    CU
     
    Thomas Möller, 20. Februar 2012
    #13
  14. Hallo!

    Alle beide - also auch der mit der VB6-COM-dll?

    Ich testet jetzt einmal mit einer VM mit WinXP SP3 => In dieser VM kann ich nicht einmal Microsoft.Windows.ActCtx erzeugen, obwohl es lt. MSDN in WinXP verfügbar sein sollte - außer ich interpretierte den Text falsch und das mit WinXP ist nur möglich, wenn man ActCtx installiert.


    Übrigens: eine ist mri noch aufgefallen: in der API-Funktion CreateActCtx wird die Struktur ACTCTX übergeben. Dort kann man ein "lpAssemblyDirectory" einstellen.
    Mir ist es allerdings noch nicht gelungen, CreateActCtx per API-Deklaration zu verwenden.

    mfg
    Josef
     
    Josef P., 22. Februar 2012
    #14
  15. Hallo Josef!
    Ja, auch der mit der VB6-COM-dll. Der Test mit der Dot-Net-COM-dll wird ja eh per Definition ignoriert. *wink.gif*
    Da sind wir an der selben Stelle angekommen. Die ACTCTX-Struktur habe ich auch gefunden. Leider findet sich dazu außer der Dokumentation wenig im Netz. Dieses Thema scheint also nicht so sehr verbreitet zu sein. Schade!

    CU
     
    Thomas Möller, 22. Februar 2012
    #15
Thema:

Regfree COM / Side-by-Side

Die Seite wird geladen...
  1. Regfree COM / Side-by-Side - Similar Threads - Regfree COM Side

  2. COM-Add-Ins automatisch starten

    in Microsoft Excel Hilfe
    COM-Add-Ins automatisch starten: Hallo, gibt es eine Möglichkeit, dass man bestimmte COM-Add-Ins beim Starten von Excel automatisch starten kann. Zur zeit muss ich immer Excel öffnen und dann in die COM-Add-Ins Verwaltung gehen...
  3. Side-by-Side Fehler komme nicht dahinter

    in Microsoft Access Hilfe
    Side-by-Side Fehler komme nicht dahinter: Hallo Leute, seit heute kann ich mein Access2010 nicht mehr starten , bekomme folgende Fehlermeldung: _________________________________________________________________ Fehler beim Generieren des...
  4. Eigenschaft .Version von Access als COM-Applikation

    in Microsoft Access Hilfe
    Eigenschaft .Version von Access als COM-Applikation: Moinsens! Ich checke gerade für eine Code-Weiche die Versionsnummern der einzelnen Office-Anwendungen. Schon blöd, daß einige ihre Version mit , und andere mit . getrennt darstellen. Wenn die...
  5. COM Add-in kann Zellen nicht auslesen bzw. editieren

    in Microsoft Excel Hilfe
    COM Add-in kann Zellen nicht auslesen bzw. editieren: Ich Benutze folgende Office Version: Microsoft Office Professional Edition 2003 Microsoft Office Excel 2003 (11.8012.6568) SP 2 Programmiersprache : VB .Net Ich möchte ein COM Add-in durch...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden