Zitat:
Delphi
IDE -> Menü Run -> Parameters -> Host application: "net", Parameters: "start MeinServiceName" (jeweils ohne die Anführungszeichen).
Über NET START im Debugger gestartet funktioniert nicht.
Application.Run; beendet sich dann immer sofort und startet erst garnicht.
Das passierte auch schon, als ich damals versuchte den Prozess (die Service.exe) direkt im Delphi zu debuggen.
Irgendwie erkennt TService anscheinend, daß es nicht als "Dienst" im SYSTEM-Konto läuft und startet dann garnicht erst.
Aus diesem Grund hatte ich damals sowas gemacht, um es Debuggen zu können.
Delphi-Quellcode:
procedure TProdatSRVXEService.ServiceCreate(Sender: TObject);
var
Started: Boolean;
Temp: TForm;
begin
LogEvent('DataServer-Create');
LoadConfiguration;
if Trim(SvcMgr.Application.Title) = '' then
SvcMgr.Application.Title := ExtractFileName(Forms.Application.ExeName);
if IsDebuggerPresent or FindCmdLineSwitch('DEBUG') then begin
Forms.Application.MainFormOnTaskBar := False; // geht leider doch nicht ohne Form
Forms.Application.CreateForm(TForm, Temp); // Form zum Beenden und für Eintrag in Taskbar
Temp.Caption := 'Debug-Mode: ' + SvcMgr.Application.Title;
Temp.OnCloseQuery := DebugServiceClose;
Temp.Visible := True;
{ SvcMgr.Application.Run; }
{}if FindCmdLineSwitch('INSTALL', ['-', '/'], True) then
{} TServiceApplicationHack(Application).RegisterServices(True, FindCmdLineSwitch('SILENT', ['-', '/'], True))
{}else if FindCmdLineSwitch('UNINSTALL', ['-', '/'], True) then
{} TServiceApplicationHack(Application).RegisterServices(False, FindCmdLineSwitch('SILENT', ['-', '/'], True))
{}else begin
{} Started := True;
{} ServiceStart(Self, Started);
{} if Started then
{} while not (Terminated or StopService) do begin
{} Forms.Application.ProcessMessages;
{} Sleep(20);
{} end;
{} Forms.Application.Terminate;
{}end;
end;
end;
procedure TProdatSRVXEService.DebugServiceClose(Sender: TObject; var CanClose: Boolean);
begin
StopService := True;
end;
Diese "Hack" läuft, wobei Application.Ran umgangen wird, welches ja erzeit nicht geht und beim Debuggen auch nie funktionierte.
Allerdings läuft er so als Anwendung und nicht als Dienst.
PS: Diesen Codeteil hatte ich gerade natürlich auskommentiert.
Ein Therapeut entspricht 1024 Gigapeut.