Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
Delphi 10.2 Tokyo Professional
|
AW: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win XP
21. Okt 2013, 19:04
hi , ich hab mal zum testen einen dienst geschrieben und den in nem virtuellen win7 x64 installiert. jedoch lässt sich der dienst einfach nicht starten ...
was mach ich da falsch???
interactive ist auf true
bilder sind in der rar
so hab ich den dienst registriert:
Delphi-Quellcode:
function ServiceRegister(szMachine, szServiceFile, szServiceName,
szDisplayName: pchar): Boolean;
var
h_manager, h_svc: SC_Handle;
begin
Result := false;
h_manager := OpenSCManager(szMachine, nil, SC_MANAGER_ALL_ACCESS);
if h_manager > 0 then begin
h_svc := CreateService(h_manager,
szServiceName,
szDisplayName,
SERVICE_START or SERVICE_QUERY_STATUS or _DELETE,
SERVICE_WIN32_OWN_PROCESS, // or SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
szServiceFile,
nil, nil, nil, nil, nil);
if h_svc > 0 then begin
result := true;
CloseServiceHandle(h_svc);
end;
CloseServiceHandle(h_manager);
end;
end;
ServiceRegister(pchar(edit2.text),pchar(edit3.Text),pchar(edit1.text),pchar(edit4.text));
und so den dienst geschrieben:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls;
type
TService1 = class(TService)
procedure ServiceExecute(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
private
{ Private-Deklarationen }
public
function GetServiceController: TServiceController; override;
{ Public-Deklarationen }
end;
var
Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.ServiceExecute(Sender: TService);
begin
// ShowMessage('OnExecute - begin');
while not Terminated do
begin
ServiceThread.ProcessRequests(False);
end;
// ShowMessage('OnExecute - end');
end;
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
end;
end.
|
|
Zitat
|