| Autor |
Beitrag |
F.Art
      
Beiträge: 434
|
Verfasst: Mi 15.12.04 14:52
Ich möchte mein Projekt als Dienst eintragen lassen wie mache ich dies?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 15.12.04 14:53
In dem du einen Dienst schreibst.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Mi 15.12.04 14:59
Wie geht das von statten?
Habe noch keine erfahrungen damit.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Fr 17.12.04 17:41
Was ist nun zu beachten wenn ich einen Dienst coden will?
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Fr 17.12.04 17:47
In Delphi: Datei -> Neu -> Weitere -> Unter Neu: Service Anwendung
und schon hast du deinen Dienst  Trägt sich auch brav automatisch ein (in die Dienstverwaltung von Widnows) beim ersten Start.
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mo 20.12.04 10:17
Kann man auch machen das es sich erst zur Laufzeit wahlweise als Dienst einstellt (So dass der Anwender entscheiden kann ob es ein Dienst ist)? Eigentlich müsste man es machen können. Ich weiß nur nicht wo es eingespeichert wird das es ein Dienst ist. Ich vermute mal in der Restrierung. Aber wo?
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mo 20.12.04 10:20
Nein, das geht nicht. Aber vllt reicht es dir auch schon, wenn du einen Dienst hast und den einmal automatisch starten läßt und einmal Manuell..
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 21.12.04 08:06
Wo speichert sich Windows eigentlich ein, das irgendein Programm ein Dienst ist?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 21.12.04 08:19
Das speichert Windows gar nicht. Das merkt es am Aufbau der Exe.
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Di 21.12.04 15:06
Bist du sicher Luckie?
Hab das hier gefunden.
Könnte seine Frage beantworten.
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
JiimmyC
      
Beiträge: 35
WinXP SP1
|
Verfasst: Di 21.12.04 15:36
Luckie, tut mir leid doch eine Service Anwendung hat keinen anderen exe aufbau als irgendeine andere Anwendung.
Ich denke mir mal dass Delphi bei einer Service anwendung den ganzen OpenSCManager/CreateService/CloseServiceHandle transparent macht. MSDN.MICROSOFT.COM/L...OC/BASE/SERVICES.ASP
Fuer dir Registry wuerde ich mal folgende keys vorschlagen:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
Der einzige unterschied von einem Service und einem normalem Run\ in der Registry ist dass Services noch bevor einem Logon ausgefuerht werden.
_________________ Information in this online help system is subject to change without notice.
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Di 21.12.04 15:47
| JiimmyC hat folgendes geschrieben: | | Der einzige unterschied von einem Service und einem normalem Run\ in der Registry ist dass Services noch bevor einem Logon ausgefuerht werden. |
Und somit mit den Rechten des SYSTEM-Benutzers laufen!
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
JiimmyC
      
Beiträge: 35
WinXP SP1
|
Verfasst: Di 21.12.04 16:10
| MrSaint hat folgendes geschrieben: | | JiimmyC hat folgendes geschrieben: | | Der einzige unterschied von einem Service und einem normalem Run\ in der Registry ist dass Services noch bevor einem Logon ausgefuerht werden. |
Und somit mit den Rechten des SYSTEM-Benutzers laufen! |
...und somit mit den Rechten des System Benutzers laufen. Haette ich doch beihnahe vergessen 
_________________ Information in this online help system is subject to change without notice.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 21.12.04 16:12
| JiimmyC hat folgendes geschrieben: | Luckie, tut mir leid doch eine Service Anwendung hat keinen anderen exe aufbau als irgendeine andere Anwendung.
|
Das meinte ich:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| program svc; uses windows, winsvc;
const servicename = 'TESTSERVICE'; displayname = 'Assarbad''s testservice';
procedure SERVICE_MAIN; forward;
{$INCLUDE consolehlp.pas} {$INCLUDE service.pas}
procedure SERVICE_MAIN; begin repeat if not paused then begin end; until stopped; end;
begin PROG_MAIN; end. |
Grundgerüstz eines Services.
Im Gegensatz dazu das Grundgerüst einer Windows GUI Anwendung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111:
|
program fenster;
{$R resource.res}
uses Windows, Messages;
const ClassName = 'WndClass'; AppName = 'Fenster-Demo'; WindowWidth = 750; WindowHeight = 125;
var ahdc: HDC; buffer: array[0..99] of Char; buffer1: array[0..99] of Char; xPos, yPos: Integer;
function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall; var x, y : integer; begin Result := 0;
case uMsg of WM_CREATE: begin x := GetSystemMetrics(SM_CXSCREEN); y := GetSystemMetrics(SM_CYSCREEN); MoveWindow(hWnd, (x div 2) - (WindowWidth div 2), (y div 2) - (WindowHeight div 2), WindowWidth, WindowHeight, true); end; WM_DESTROY: PostQuitMessage(0); WM_LBUTTONDOWN: if(MK_SHIFT or MK_LBUTTON = wParam) then begin ahdc := GetDC(hWnd); xPos := LoWord(lParam); [..] TextOut(ahdc, 20, 20, buffer, Length(buffer)); ReleaseDC(hWnd, ahdc); end; else Result := DefWindowProc(hWnd, uMsg, wParam, lParam); end; end;
var wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @WndProc; cbClsExtra : 0; cbWndExtra : 0; hbrBackground : COLOR_APPWORKSPACE; lpszMenuName : nil; lpszClassName : ClassName; hIconSm : 0; ); msg: TMsg;
begin wc.hInstance := hInstance; wc.hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(100)); wc.hCursor := LoadCursor(0, IDC_ARROW);
RegisterClassEx(wc);
CreateWindowEx(0, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, WindowWidth, WindowHeight, 0, 0, hInstance, nil);
while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end;
ExitCode := msg.wParam; end. |
Ein Service ist schon anders aufgebaut.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 21.12.04 16:33
@Luckie: er hat es einfach total anders verstanden als dus gemeint hast: er hat wahrscheinlich geglaubt, die EXE ansich (also das Binärfile) unterscheidet sich von einer herkömmlichen EXE
AXMD
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 21.12.04 16:41
Äh, ja, war wohl etwas unglücklcih ausgedrückt. Aber ich denke man sieht ganz deutlich, dass man nicht so einfach eine bestehende Windows GUI zum Service machen kann. Das ganze muss schon von Anfang an als Service konzipiert werden, sonst gibt das nichts.
|
|