Re: TService - Druckerproblem!
Eine Bemerkung noch: einen Service zu schreiben der Interaktiv ist, ist im grunde schwachsinnig. Interaktive Services unterwandern den eigentlichen Sinn von Services und somit auch die Sicherheit. Sie sind im Grunde schlimmer, eg. unsicherer, als normale Anwendungen.
Einen interaktiven Service kannste auch als normale Anwendung programmieren, und dies wäre dann vom Sicherheitskonzept sinnvoller und erspart dir viel Arbeit. Normalerweise sollte ein Service nicht interaktiv sein, und falls notwendig wird eine zweite Anwendung installiert die dann die Informationen zum Service anzeigen und ändern kann. Gruß Hagen |
Re: TService - Druckerproblem!
brauch aber ne gute Lösung um ein externes Programm VOR allem anderen zu starten - dass man nicht auf die TaskBar kommt...
|
Re: TService - Druckerproblem!
Dein TForm sollte in TService.OnExecute() erzeugt und auch wieder freigegeben werden. Bedenke in Serives ist alles Thread-basiert.
Gruß Hagen |
Re: TService - Druckerproblem!
das ist bisher so:
Code:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
var ProcID: PCardinal; begin RunProcess(ExtractFilePath(ParamStr(0)) + 'Disco.exe', SW_MINIMIZE, TRUE, ProcID); end; function TService1.RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PCardinal): Longword; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; StartupInfo.wShowWindow := ShowCmd; if not CreateProcess(nil, @Filename[1], nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin if wait = FALSE then begin if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId; exit; end; WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); end; if ProcessInfo.hProcess <> 0 then CloseHandle(ProcessInfo.hProcess); if ProcessInfo.hThread <> 0 then CloseHandle(ProcessInfo.hThread); end; dai ich ja kein form anzeigen will, sondern ein Programm starte... |
Re: TService - Druckerproblem!
weiß keiner woran es liegen könnte?
|
Re: TService - Druckerproblem!
weiß keiner woran es liegen könnte?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 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