![]() |
Beliebiges Programm als Service?
Hm, hab da ein Problem: Wie kann ich ein beliebiges Win16/32 Programm als Service unter 2000/XP starten?
Es gibt da zwar Programme, die das können, aber die kosten Geld. Und ich möchte das in ein Deploy-Paket für Software mitreinstecken. Hier im FOrum gibts zwar viel über Services, aber nix zu meinem Problem. Wäre nett, wenn jemand mir helfen könnte. |
Re: Beliebiges Programm als Service?
Man schreibe sich einfach einen Service, der genau tut was du willst ...
BTW: Mein ![]() |
Re: Beliebiges Programm als Service?
danke für die hilfe.
hab gedacht, das wäre um einiges komplizierter! dann werd ich mich mal dranmachen... |
Re: Beliebiges Programm als Service?
Ganz nach Programm mußt du noch entscheiden, ob der Service interaktiv oder nicht interaktiv sein soll. Einmal wird dann ein Fenster erscheinen, im anderen Fall nicht.
|
Re: Beliebiges Programm als Service?
Um bestehende Anwendungen als Service laufen zu lassen kannst du dir mal
![]() |
Re: Beliebiges Programm als Service?
Zitat:
Hatte das Ding auch schonmal gesehen. Ich werde vielleicht mal ne OpenSource-Variante für so ein Programm schreiben ;) |
Re: Beliebiges Programm als Service?
wird da nicht einfach nur ein shellexecute von einem service aus gemacht?
dann rennt die gestartete anwendung auch unsichtbar. ist das dann auch locker gesehen ein service oder einfach nur unsichtbar? obwohl diese applikationen dann fenster haben, werden sie nicht angezeigt.. manche geben deshalb fehler und stürzen ab hab das mal selbst probiert ;) |
Re: Beliebiges Programm als Service?
Zitat:
Zitat:
Außerdem kommt es drauf an, wie man sich anstellt. Normalerweise soll man Services NIE als interaktiv laufen lassen. Stattdessen sollen sich die Services über Manipulation an den ACLs für Desktop/WindowStation und durch SetProcessWindowStation()/SetThreadDesktop() Zugriff auf den Desktop verschaffen. Oder gar durch "Impersonation". Das Problem ist nämlich, daß interaktive Dienste, so sie anfällig sind (zB Shatter-Attack) und unter SYSTEM-Kontext laufen, quasi volle Rechte auf das System gewähren. |
Re: Beliebiges Programm als Service?
Hi,
geht noch einfacher. Die beiden von M$ dafür vorgesehenen Tools sind INSTSRV und SRVANY aus dem Resource Kit Gruss EL |
Re: Beliebiges Programm als Service?
Zitat:
|
Re: Beliebiges Programm als Service?
Zitat:
Gruss EL |
Re: Beliebiges Programm als Service?
|
AW: Re: Beliebiges Programm als Service?
...ist lange her, ich werd den Thread mal wiederbeleben.
Ich brauche eben das: Ein Programm als Dienst laufen lassen. Ich hab ![]() Ich hab nun eine 1-Formular-Mini-Applikation (In OnCreate erzeugt sie ein File, in onDestroy ein anderes) gemacht und mal als Dienst registriert. Click ich in der Dienste-Fenster auf "Dienst starten", dann läuft der Progressbar eine Zeit lang, OnCreate wird offensichtlich ausgeführt, dann aber hängt der Progrssbar lang bei ca. 50% und dann kommt "Der Dienst "Test" auf "Lokaler Computer" konnte nicht gestartet werden. Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung." Hat jemand eine Idee? Danke! |
AW: Beliebiges Programm als Service?
.. soweit ich weiß sind interaktive Services seit Windows XP nicht mehr gestattet.
Einen richtigen Serivice zu bauen ist mit Delphi auch kein Hexenwerk. Grüße Klaus |
AW: Beliebiges Programm als Service?
Um genau zu sein waren interaktive Dienste schon immer nur eine Notlösung, konnten aber bis XP dennoch aktiviert werden. Seit Vista ist diese extreme Sicherheitslücke endlich komplett gestopft, indem interaktive Dienste gar nicht mehr erlaubt sind.
Zitat:
In einer Serviceanwendung kannst du einfach das Start- und Ende-Event des Dienstes benutzen und fertig. Schau einfach mal in die Liste der Events, wenn du eine Serviceanwendung in Delphi erstellt hast. ;-) |
AW: Beliebiges Programm als Service?
Ich habe gute Erfahrungen mit dem -kostenpflichtigen, aber erschwinglichen- Programm
![]() Das ist gut geeignet, um eine Desktop - Anwendung mal schnell als Service auszuführen. Natürlich muß diese automatisch 'laufen', Benutzerinteraktionen können nur beim Start und Beenden des "Services" mitgegeben werden. Grüße Tino |
AW: Beliebiges Programm als Service?
Zitat:
Es geht hier um eine Installation einer alten Version unserer Software. Da gab's ein Tool, das (nicht sonderlich smart) im Autostart aufgerufen wurde und sich dann in der Taskleiste eingenistet hat. In der aktuellen Version der Software ist dieses Tool bereits ein Service, ich will dem Kunden aber nicht die neue Version installieren müssen. Daher wollte ich die alte Anwendung (die ein Fenster hat, das aber nicht sichtbar zu sein braucht) als Service starten. Heisst das, dass man mit cs.exe nur Anwendungen ohne WinHandles als Dienst starten kann? Oder warum kommt diese Fehlermeldung? Danke |
AW: Beliebiges Programm als Service?
Zitat:
|
AW: Beliebiges Programm als Service?
Ich mache das in einer Anwendung, die man als Dienst installieren und verwenden kann, aber auch normal starten.
Stichworte: schauen, ob die Exe von der services.exe gestartet wird, ob sie /install oder /uninstall als Parameter hat, dann entweder TServiceApplication oder TApplication, ... |
AW: Beliebiges Programm als Service?
Zitat:
Aber für diesen Kunden MUSS es die alte Version sein. Und bei der möchte ich die Sourcen möglichst unangetastet lassen. |
AW: Beliebiges Programm als Service?
Oder andersrum.
Man baut einen Service, welcher sich (über einen Parameter, bzw. über eine Debugger-Erkennung) als normales Programm startet. So hab ich das mit dem Service unsere unserer Produktes auch gehandhabt. [edit]
Delphi-Quellcode:
unit MyServiceDataModul;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, SvcMgr, Math, AppEvnts, Registry, Dialogs, ExtCtrls, Types, StdCtrls; type TMyService = class(TService) function GetServiceController: TServiceController; override; procedure ServiceCreate(Sender: TObject); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceExecute(Sender: TService); procedure DebugServiceClose(Sender: TObject; var CanClose: Boolean); end; var MyService: TMyService; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin MyService.Controller(CtrlCode); end; function TMyService.GetServiceController: TServiceController; begin Result := ServiceController; end; type TServiceApplicationHack = class(TServiceApplication); procedure TMyService.ServiceCreate(Sender: TObject); var Started: Boolean; Temp: TForm; begin if IsDebuggerPresent or FindCmdLineSwitch('DEBUG', ['-', '/'], True) 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 do begin {} Forms.Application.ProcessMessages; {} Sleep(20); {} end; {} Forms.Application.Terminate; {}end; end; end; procedure TMyService.ServiceStart(Sender: TService; var Started: Boolean); begin try ... except on E: Exception do begin Started := False; ErrCode := 666; E.Message := 'Service konnte nicht gestartet werden.' + sLineBreak + E.Message; raise; end; end; end; procedure TMyService.ServiceExecute(Sender: TService); begin while not Terminated do try ServiceThread.ProcessRequests(False); except on E: Exception do begin LogEvent('Es ist ein nicht abgefangener Fehler aufgetreten.', E); Sleep(500); end; end; end; procedure TMyService.DebugServiceClose(Sender: TObject; var CanClose: Boolean); begin if Assigned(MyService) and Assigned(MyService.ServiceThread) then MyService.ServiceThread.Terminate; end; end. |
AW: Beliebiges Programm als Service?
Yeah!
Es geht ja doch!!! Hier eine kleine Anleitung: ![]() Man braucht beide, srvany und sc. Beide gemeinsam machen's möglich und stören sich auch nicht daran, wenn sich die Anwendung nicht an die Richtlinien für einen Dienst hält. (es geht also auch, selbst wenn die App ein Hauptfenster hat und so einiges in OnShow macht). Man sollte nur im Hinterkopf behalten, dass die Anwendung bei Dienst-Stop einfach gekillt wird. Also kein OnDestroy, OnClose oder dergleichen. hth, Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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