![]() |
sMachine und sService ???
Guten abend,
also ich bin schon eine menge weiter gekommen was das Statusabfragen von Diensten angeht. Nur habe ich noch eine Frage. In der function:
Delphi-Quellcode:
Muss man doch für sMachine den Namen den Namen der CPU über die der Service läuft und für sService den Namen des Dienstes angeben oder?
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
Woher bekomme ich den Namen von sMachine raus? Bei sService wird es warscheinlich der name wie er in der Registry steht sein oder? :?: Und beim Compelieren sagt mir der Compiler: [Error] Data.pas(196): Undeclared identifier: 'SC_Handle' [Error] Data.pas(197): Undeclared identifier: 'TServiceStatus' [Error] Data.pas(202): Undeclared identifier: 'OpenSCManager' [Error] Data.pas(202): Undeclared identifier: 'SC_MANAGER_CONNECT' wenn ich das hier in meine Source einbaue:
Delphi-Quellcode:
[edit=SirThornberry]Beiträge zusammengeführt - nächstes mal bitte http://www.delphipraxis.net/template.../icon_edit.gif verwenden - Mfg, SirThornberry[/edit]
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
{******************************************} {*** Parameters: ***} {*** sService: specifies the name of the service to open {*** sMachine: specifies the name of the target computer {*** ***} {*** Return Values: ***} {*** -1 = Error opening service ***} {*** 1 = SERVICE_STOPPED ***} {*** 2 = SERVICE_START_PENDING ***} {*** 3 = SERVICE_STOP_PENDING ***} {*** 4 = SERVICE_RUNNING ***} {*** 5 = SERVICE_CONTINUE_PENDING ***} {*** 6 = SERVICE_PAUSE_PENDING ***} {*** 7 = SERVICE_PAUSED ***} {******************************************} var SCManHandle, SvcHandle: SC_Handle; SS: TServiceStatus; dwStat: DWORD; begin dwStat := 0; // Open service manager handle. SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT); if (SCManHandle > 0) then begin SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS); // if Service installed if (SvcHandle > 0) then begin // SS structure holds the service status (TServiceStatus); if (QueryServiceStatus(SvcHandle, SS)) then dwStat := ss.dwCurrentState; CloseServiceHandle(SvcHandle); end; CloseServiceHandle(SCManHandle); end; Result := dwStat; end; function IsServiceRunning(sMachine, sService: PChar): Boolean; begin Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService); end; function IsServiceInstalled(sMachine, sService: PChar): Boolean; begin Result := -1 <> ServiceGetStatus(sMachine, sService); // genau hier sagt der Compiler liefert immer True bzw. False end; |
Re: sMachine und sService ???
Machine ist der Namen des Computers. Also bei dir wohl der lokale Rechner. Über Netzwerk kann man das auch auf anderen Rechnern abfragen. Die Compiler-Fehler bekommst du weil du wohl die entsprechenden Dateien in den Uses nicht eingetragen hast. Welche Delphiversion verwendest du?
|
Re: sMachine und sService ???
Ich benutze Delphi6
|
Re: sMachine und sService ???
personal, professional oder enterprice? Je nach dem welche Version du verwendest sind die entsprechenden Header-Dateien für Services vorhanden oder nicht. SC_Handle ist übrigens nur ein normales Handle und nur der Übersichtlichkeit als eigener Typ declariert.
|
Re: sMachine und sService ???
Ich habe Delphi6 Enterprise! Also deklariere ich einfach SC_Handle in einfach nur Handle um und dann gehts?
|
Re: sMachine und sService ???
bei der Enterprice brauchst du einfach nur die entsprechende Unit in den Uses eintragen.
Binde einfach WinSVC ein :-)
Delphi-Quellcode:
unit xyz;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, WinSVC; |
Re: sMachine und sService ???
Ok danke erstmal! Das Compelieren klappt, nun weiss ich aber immer noch nicht was ich unter sMachine und sService eingeben soll? :?
|
Re: sMachine und sService ???
für sMachine kannst du nil übergeben (bedeutet das du zur lokalen Maschiene verbinden willst) und bei sService musst du den Namen deines Dienstes übergeben (nicht den Displayname sondern den richtigen Namen)
|
Re: sMachine und sService ???
Jetzt bekomme ich aber wenn ich das hier mache:
Delphi-Quellcode:
diese Fehlermeldung:
procedure TDM.ConnectTuneDatabase;
begin while IsServiceInstalled(nil, InterBaseServer) and IsServiceInstalled(nil, InterBaseGuardian) do if ConnectToDatabase(dbTune, SlashSep(BasePath, 'data\d1.gdb')) then begin OpenTuneTables(True); end; end; end; [Error] Data.pas(243): Undeclared identifier: 'InterBaseServer' [Error] Data.pas(243): Undeclared identifier: 'InterBaseGuardian' Wieso muss ich die nochmal deklarieren?? Und als was? |
Re: sMachine und sService ???
ich vermute die Funktionen erwarten strings. somit musst du InterBaseServer in hochkommes (') setzen. Allerdings gehört das nicht mehr zur eigentlichen Frage. Mache bitte für neue Fragen ein neues Thema auf :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz