AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriff verweigert bei Nutzung eines COM Servers im Service
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff verweigert bei Nutzung eines COM Servers im Service

Offene Frage von "crypti"
Ein Thema von crypti · begonnen am 8. Jan 2009 · letzter Beitrag vom 10. Jan 2009
Antwort Antwort
crypti

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

Zugriff verweigert bei Nutzung eines COM Servers im Service

  Alt 8. Jan 2009, 18:01
Hallo!

Ich habe ein kleines Problem beim Zugriff auf einen COM Server der innerhalb eines Services läuft. Hierzu kurz ein Überblick.

Ich habe einen Service über den Delphi Assistenten erstellt und dann die Typenbibliothek sowie ein Automatisierungsobjekt hinzugefügt. In diesem existiert nun eine Funktion, welche nur ganz simpel eine Debugmeldung ausgibt.
Delphi-Quellcode:
unit COM_MyServer;

{$WARN SYMBOL_PLATFORM OFF} 

interface

uses
  ComObj, ActiveX, MyServerLib_TLB, StdVcl, Windows;


type
  TMyServer = class(TAutoObject, IMyServer)
  protected
    procedure TestServer; safecall;
  end;

implementation

uses ComServ;

{ TMyServer } 

procedure TMyServer.TestServer;
begin
     windows.OutputDebugString(PCHAR('TMyServer.TestServer: erfolgreich ausgeführt'));
end;

initialization
  TAutoObjectFactory.Create(ComServer, TMyServer, Class_MyServer,
    ciMultiInstance, tmApartment);

end.
Der zugehörige Client sieht ganz einfach aus. Dieser importiert die TLB und greift dann auf den Server zu.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
    MyServer:=CoMyServer.Create;

    MyServer.TestServer();
end;
Denn nach der Erstellung des Services 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 den Client darauf zugreifen will, dann erhält man das Problem, dass die exe einfach noch einmal unter dem gerade angemeldeten Benutzeraccount gestartet wird. Der COM Server wird nicht mit dem laufenden Service assoziiert. 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 AUS 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
  Mit Zitat antworten Zitat
chipNET

Registriert seit: 28. Mär 2004
5 Beiträge
 
#2

Re: Zugriff verweigert bei Nutzung eines COM Servers im Serv

  Alt 10. Jan 2009, 13:21
Nach Empfehlung sollte du ja einen neuen topic aufmachen, da diese Problematik in dem anderen zu off-topic war. Aus diesem Grund widerhole ich mal meine Frage...

Zitat:
Gibt es da nicht tools die die Registrierung für dich übernimmt. Bei .NET gibts doch glaube ich sowas wie Regsvcs.exe und ComSvcConfig.exe. Gibts sowas nicht auch im Standard WinAPI Bereich für C++ und damit auch für Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Zugriff verweigert bei Nutzung eines COM Servers im Serv

  Alt 10. Jan 2009, 13:58
COMServer und NTDienst laufen auch mit den zusätzlichen Registryanpassungen nicht "geschmeidig". Selbst hatte ich vor jahren mehrere solche Konstrukte wobei der eine obwohl die gleichen Fixes gemacht wurden nicht vernünftig bei Rechnerstart gestartet wurde.

Schau dir mal SVCom an. Dies nimmt sich genau den Probleme Delphi mit NTDienst + COM-Server an.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz