AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StartService() Probleme

Ein Thema von Dani · begonnen am 5. Feb 2003 · letzter Beitrag vom 8. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

StartService() Probleme

  Alt 5. Feb 2003, 18:30
Hooi hoi!

Es gibt eine Sache bei StartService() , die ich nicht ganz verstehe:


lpServiceArgVectors
[in] Pointer to an array of pointers to null-terminated strings to be passed to a service as arguments. Driver services do not receive these arguments. If no arguments are passed to the service, this parameter can be NULL. The service accesses these arguments through its ServiceMain function. The first argument (argv[0]) is the name of the service by default, followed by the arguments, if any, in the lpServiceArgVectors array.


Also ein Zeiger auf ein Array, das wiederum Zeiger auf nullterminierte Strings enthält, wobei der erste dieser Zeiger aber der Servicename sein muss?!

Wer ist für diese Form der Parameter-Übergabe verantwortlich? *grrr*

Hab ichs wenigstens richtig verstanden?

Jedenfalls weiß ich nun nicht genau, was ich der Funktion nun schicken soll.

Vielleicht sowas?

Code:
var ParamsArray: array of Pchar;

{...}

StartService(SCHandle, Length(ParamsArray)-1, ^ParamsArray);
Was mich auch verwirrt, ist dieser Parameter:
dwNumServiceArgs

Specifies the number of argument strings in the lpServiceArgVectors array. If lpServiceArgVectors is NULL, this parameter can be zero.


Soll diese Nummer jetzt die Anzahl der tatsächlichen Parameter ohne Argument null, das ja "by default" der Name des Services ist, oder einfach die Länge des Arrays sein?

Gruß,
Dani
Dani H.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 5. Feb 2003, 18:45
Normalerweise brauchst du diese Parameter nicht:
Delphi-Quellcode:
var p: PChar;

p := nil;
if StartService(SCService, 0, p) then
  Mit Zitat antworten Zitat
Shir Khan

Registriert seit: 11. Mai 2004
8 Beiträge
 
Delphi 7 Architect
 
#3

Re: StartService() Probleme

  Alt 7. Jul 2004, 14:37
Wenn ich solche Antworten schon höre!!!!!!!!!!
Gehen wir einfach mal davon aus er BRAUCHT DIESE PARAMETER!!!!!!!

Zumindest brauche ICH DIESE PARAMETER, aber leider Streuben diese sich und irgendwie bekomme ich die Übgabe nicht hin.

Hat also vielleicht jemand ein Beispiel parat, wie man dieses Parameter-Array, z.B. mit zwei Parametern, erzeugen kann und wie es dann übergeben wird??

PS: Bitte keinen Beitrag "das brauchst Du normalerweise nicht"... den ich brauche es....

Danke im Vorraus 8) 8)
GVT
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#4

Re: StartService() Probleme

  Alt 7. Jul 2004, 16:26
Es wuerde in etwa so aussehen:

Delphi-Quellcode:
const
  PARAMETER_COUNT = 3;
var
  Parameters: array[0..PARAMETER_COUNT - 1] of PChar;
begin
  Parameters[0] := 'service.exe';
  Parameters[1] := 'Parameter 1';
  Parameters[2] := 'Parameter 2';
  StartService(SCHandle, Length(Parameters) - 1, @Parameters[0]);
end;
Leider kann ich es jetzt nicht auf die Schnelle testen.
  Mit Zitat antworten Zitat
Shir Khan

Registriert seit: 11. Mai 2004
8 Beiträge
 
Delphi 7 Architect
 
#5

Re: StartService() Probleme

  Alt 7. Jul 2004, 16:43
*prust*

So hatte ichs auch schon versucht. Aber der letzte Parameter ist ein "var"-Parameter, dann würde Formal und Actualparameter nicht passen. Ich hab dann auch einfach eine PChar Variable eingebaut und @Parameters[0] so umgewandelt. Leider kommt in Service dann nur die Adresse des ersten Parameters an.. der zweite Parameter ist zufälliger Nonsens.

Wenn ich anstatt eines Array einfach nur einen PChar überheben z.B. PChar('Hallo'), wieder über eine Variable zwischengepuffert, dann kommt als erster Parameter tatsächlich 'Hallo' an. Der zweite Parameter ist wieder Nonsens (hab ich auch so erwartet). Diese Art der Parameterübergabe ist schlicht und einfach ein Verbrechen gegen die Menschlichket.

Ich suche schon Stundenlang im Netz und finde kein Beispiel für einen StartService mit Parametern..... bitte, einer muß das doch schon mal gemacht haben...

GVT
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#6

Re: StartService() Probleme

  Alt 7. Jul 2004, 16:47
Ich weiss nicht ob Dir das hilft, denn ich habe eine komplett eigene Service-Klasse geschrieben die direkt auf die API zugreift. Daher greife ich über einen ControlDispatcher auf den Service zu (und die ServiceMain - Funktion ist bei mir auch eine Methode).

Aber vielleicht hilft es ja doch.
Delphi-Quellcode:
var
   m_dispatcher: array[0..1] of TServiceTableEntry;
begin
   m_dispatcher[0].lpServiceName := PChar('ServiceName'); // hier der Name des Service
   m_dispatcher[0].lpServiceProc := @ServiceProcedure; // adresse zur ServiceMain-Funktion
   m_dispatcher[1].lpServiceName := nil;
   m_dispatcher[1].lpServiceProc := nil;

   StartServiceCtrlDispatcher(m_dispatcher[0]);
end;
Edit: Und nicht wundern, die beiden NIL - Einträge da braucht es wirklich. Weiss nicht warum, aber ohne die gehts nicht.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Shir Khan

Registriert seit: 11. Mai 2004
8 Beiträge
 
Delphi 7 Architect
 
#7

Re: StartService() Probleme

  Alt 7. Jul 2004, 17:37
Nein, tut mir leid. Die Funktion StartService ist ja direkt eine API-Funktion.
Auch das schreiben von eigenen Service-Klassen hilft da glaube ich nicht, zudem habe ich auch nicht die Zeit dafür jetzt.

So langsam aber sicher treibt mich diese Funktion in den Wahnsinn. Ich habe bestimmt schon 200 verschiede Arten ausprobiert dieser Funktion ihr verblödetes Array zu übergeben, aber nichts funktioniert.

Weis den wirklich niemand wie man einem Service zwei Parameter übergeben kann??? Wenn wirklich keiner was weis, dann übergebe ich eben beide Parameter im ersten Parameter und parse sie dann selbst (obwohl das ja kein Zustand ist).
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: StartService() Probleme

  Alt 7. Jul 2004, 17:48
Moin Shir Khan,

das Problem ist die Art, wie Borland die Funktion deklariert hat.

Wenn Du sie z.B. so importierst

function StartService(const hService : DWORD;const dwNumServiceArgs : DWORD;const lpServiceArgVectors : Pointer) : Longbool; stdcall; external 'advapi32.dllname 'StartServiceA'; hat sich das Problem mit dem Var Parameter erledigt, und Du kannst, z.B., die Variante von w3seek verwenden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#9

Re: StartService() Probleme

  Alt 7. Jul 2004, 19:41
ja, ich hatte fast vermutet dass Borland die funktion so deklariert hatte....typisch borland....
  Mit Zitat antworten Zitat
Shir Khan

Registriert seit: 11. Mai 2004
8 Beiträge
 
Delphi 7 Architect
 
#10

Re: StartService() Probleme

  Alt 8. Jul 2004, 13:38
*prust*

Danke Leute. Auf die Idee die Funktion einfach selbst zu importieren hätte ich auch kommen können *g*. Aber mit der geposteten Variante hier funktioniert es nun einwandfrei.

Anzumerke wäre nur, daß man selbst nicht als ersten Parameter den Serivce-Namen angeben muß. Der Windows-Service-Managere sorgt dafür das der erste Paramater der Service-Name ist - und das ohne das man sich dagegen wehren kann *ggg*.

GVT
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:46 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