DLL nur als Admin nutzbar
-
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:
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);
-
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

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

-
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?
-