Einzelnen Beitrag anzeigen

crypti

Registriert seit: 12. Feb 2005
43 Beiträge
 
#6

Re: COM-Server als Singleton umsetzen

  Alt 5. Jan 2009, 20:29
Danke Alfi001 für die Infos. Die ROT wäre eine Lösung, wenn ich bei der DLL Umsetzung bleiben würde.

Die Umstellung auf einen Service kommt mir allerdings ganz gelegen, da ich damit für mich noch weitere Vorzüge erhalte. So bin ich nun dabei einen Service mit COM Server zu realisieren.

Hier bin ich auch schon einen großen Schritt weiter gekommen. Denn nach der Erstellung des Services, der Integration der Typenbibliothek un der Automatisierungsobjekte habe ich eine exe. Diese wird als erstes als Service installiert (Parameter /install) und anschließend die Typenbibliothek registiert (Parameter /RegServer).

Wenn man nun durch einen Client darauf zugreifen will, dann erhält man das Problem was ich weiter oben schon beschrieben habe. Der COM Server wird nicht mit dem laufenden Service assoziiert und deshalb wird versucht die EXE im Usermode zu starten. Hier schaffte ein wenig googlen und die MSDN Doku Abhilfe. Man muss den Service noch einmal anlegen und dann unter der CLASS GUID als AppID (welche durch den /RegServer Befehl in die Registry gefügt wurden) eintragen.

Delphi-Quellcode:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\MeinService.exe]
"AppID"="{D3FEF3C6-5F1B-42DC-A9CB-246BD681CA2D}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{D3FEF3C6-5F1B-42DC-A9CB-246BD681CA2D}]
@="MeinService"
"LocalService"="MeinService"
"ServiceParameters"=""


[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLASS GUID DER TLB}]
"AppID"="{D3FEF3C6-5F1B-42DC-A9CB-246BD681CA2D}"
Sobald dies drin ist versucht auch der Client nicht mehr den Service noch einmal unter dem UserMode zu starten. Wenn der Dienst nicht läuft dann wird er gestartet, wenn er läuft wird er nicht erneut gestartet. Also so wie es erwartet wird.

Jedoch habe ich nun ein neues Problem. Denn wenn der Client das MyServer:=CoMyServer.Create; ausführt, dann erhalte ich die Meldung "Zugriff verweigert". Muss man für den Zugriff auf COM Server die innerhalb des Service Modes laufen noch irgendwelche Security Descriptoren beachten? Die MSDN Doku ist hier eher etwas mau...

Meine bisherigen Quellen...

http://msdn.microsoft.com/en-us/library/ms809975.aspx
http://msdn.microsoft.com/en-us/library/ms693774(VS.85).aspx

Kennt sich jemand in diesem Bereich aus und kann mir weiterhelfen? Oder bin ich der erste auf der Welt der sowas machen will und Probleme hab... *glaub ich aber nicht*
  Mit Zitat antworten Zitat