DLL nur als Admin nutzbar


  • Mod

    Variant schrieb:

    Aber nochmal um Klarheit zu bekommen und noch mehr dazu zu lernen:
    Sollte ich die DLL im Systemverzeichnis abwerfen und vom Admin dort registrieren lassen?
    So hätte doch jeder Zugriff darauf oder?

    Denn meine Anwendung hat gerade den Sinn überall hin verschiebbar zu sein
    und dennoch zu funktionieren (sofern auf dem selben PC verschoben).

    1. Wenn es ein sich um ein COM Objekt handelt muss es normalerweise vom Admin registriert werden.
    2. Sofern das COM Objekt selbst nicht Dinge benötigt, die nur ein Admin kann (Schreibzugriff auf HKLM) dann solle es funktionieren. Will die DLL also z.B. Daten in das Verzeichnis schreiben, in dem sie selbst leigt, dann wirst Du in Probleme laufen...
    3. Ein COM Modul ist nicht verschiebbar ohne das man es neu registriert.

    Du musst uns schon mehr sagen was diese DLL tut.



  • Die Beschreibung zur DLL:

    Link zum Anbieter

    PDF Split Merge ActiveX Component can split and merge PDF files for you easily.
    It is a standalone component and does not depend on Adobe Acrobat, or even Acrobat Reader.

    Die Komponente nutzt zudem eine DLL von http://www.pdfkit.com.

    Detailliertere Infos kann ich vermutlich erst morgen geben.



  • Eben habe ich mit dem Tool SIW nachgesehen ob überhaupt irgendwas
    im System verankert wird, nachdem ich DllRegisterServer gerufen habe.
    Ich finde zwar die ClassID zu der DLL, aber welchen Sinn hat das genau?

    Die DLL-Funktionen Rufe ich, wenn das CreateDispatch("PDFSplitMerge.PDFSplitMerge.1");
    bereits besteht einfach mit:

    <membervar>.Split("syntax")
    

    auf. Split die ist eine Funktion der DLL.

    Nimmt also die ClassID der Registry die Verbidnung zur DLL auf, oder?

    Ist die Rückgabe von CreateDispatch negativ, rufe ich:

    typedef int (__stdcall* fDllRegisterServer) (); 
        HINSTANCE hInst; 
        hInst = LoadLibrary("C:\\Debug\\split.dll"); 
        fDllRegisterServer fdreg = GetProcAddress(hInst, "DllRegisterServer");     
        int res = fdreg (); 
    
        FreeLibrary(hInst);
    

  • Mod

    Die ClassId ist der Name über die das COM-Objekt erzeuugt wird.

    Du kannst nicht einfach DllRegisterServer aufrufen weil dies eben Einträge in die HKLM macht! Und das geht nur als Admin!
    COM Objekte müssen installiert und registriert werden. Die kannst DU nicht einfach als Benutzer durch die Gegend kopieren.

    Schau Dich mal nach ClickOnce um...
    http://msdn.microsoft.com/en-us/magazine/cc188708.aspx



  • DllRegisterServer rufe ich ja auch nur als Admin. Den Hinweis gibt das
    Programm bzw. Installanleitung her.

    Nur lief es wohl nicht auf dem Useraccount, weil ich vermutlich die
    DLL in einem Ort (auf dem Adminacc.) registriert habe, auf den der
    normale User keinen Zugriff hat. Daher meine Frage betreffend System32-Folder.

    Was ich vom Hersteller der Dll, oder allgemein, noch nicht verstehe:

    Er wird mit einem ActiveX-Element geworben. Haben tue ich doch nur eine DLL,
    die registriert wird und dann über die Registry (ClassID) global
    verfügbar ist. In den installierten ActiveX-Komponenten des PC ist die
    DLL nicht zu sehen. Ich spare mir ja irgendwie jetzt das explizite Laden via
    LoadLibrary oder?

    Verstanden habe ich das Konzept noch nicht 😮
    Vielleicht erklärt es der von dir gepostete Link ja auch, ich mach mich mal ans lesen 👍

    Ich bin um jede Erleuchtung dankbar 😃


  • Mod

    Ich habe das Gefühl, Du hast COM und ActiveX noch nicht verstanden! Kann das sein?



  • Jupp 😃


  • Mod

    Variant schrieb:

    Jupp 😃

    OK! Dan versuche mal die Basics zu verstehen. Dann wirst Du auch merken, warum und wieso was wie geht... 🤡



  • Farf man dich nach einer Buchempfehlung zum Thema fragen?




Anmelden zum Antworten