Windows Dienst
-
Ähmmm....
das ganze hat jetzt nix mit der Regestry zu tun!
Ich will einfach nur einen Dienst starten.
der code:
SC_HANDLE hand, next;if((hand=OpenSCManager(NULL,SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS))==NULL)
cout << "Fehler beim oeffnen des Managers\n";
else
{
if ((next=OpenService(hand,"Schau",SC_MANAGER_ALL_ACCESS))==NULL)
{
cout << "Fehler beim oeffnen des Service\n";
if ((next=CreateService(hand,"Schau","Puddel",SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE,"\"c:\\oop_client.exe\"",NULL,NULL,NULL,NULL,NULL) )==NULL)
cout << "Fehler beim erstellen des Services\n";
else
cout << "Dienst erstellt\n";
}
else
cout << "Dienst geoeffnet\n";
if(StartService(next,0,NULL)!=NULL)
cout << "Dienst gestartet\n";
else
cout << "Dienst nicht gestartet: \n" << GetLastError();
}
-
Mann, du hast da schon ein GetlastError eingebaut, aber uns verraten was GetLastError liefert tust du nicht!
-
Sorry, ...
Dienst nicht gestartet: 1053
-
Bau mal GetLastError an mehreren Stellen ein. Am sinnvollsten nach Funktionsaufrufen.
-
GetLastError nützt mir ja nur was, wenn ein Fehler auftritt!
Aber alle anderen Aufrufe funktionieren ohne Probleme.
Ich überprüf sie ja alle auf ihren Rückgabewert.
-
Der Service muß innerhalb von 30 Sekunden seinen Status an den SCM melden (SetServiceStatus). Dieser Service macht das nicht, daher bekommst Du einen TimeOut als Fehler gemeldet.
-
Wollt das jetzt ausprobieren; doch ich hab Probleme mit den Parametern von RegisterServiceCtrlHandler; 2 Parameter soll ein Zeiger auf eine regestrierte Handler Funktion sein!? Weiß nicht wie ich das definier! Bzw. bei SetServiceStatus hab ich beim 2 Parameter das Problem, dass der auf die SERVICE_STATUS Struktur zeigen soll.
Vielleicht kann mir jemand ein bisschen Beispielcode zeigen??
-
Vielleicht solltest Du Dich erstmal ein wenig mit Services beschäftigen. Gorb gesagt funktioniert das jedenfalls so: Das Programm startet in der Funktion main bzw. WinMain. Dort übergibst Du dem SCM einen Zeiger auf Deine ServiceMain-Funktion (StartServiceCtrlDispatcher). In der ServiceMain-Funktion registrierst Du nun Deinen Control-Handler (RegisterServiceControlHandler/Ex). Dabei bekommst Du dann auch das benötigte Handle geliefert.
Die genaue Beschreibung und jede Menge Samples bekommst Du hier:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/services.asp?frame=true
-
Mal 'ne ganz andere Frage: Wo landet eigentlich die Ausgabe von cout, wenn ich keine Konsole aufmache?
-
Im Nirvana
-
Geh zu Codeguru. Dort gibt es einen Wizard zum erstellen von Services.
Warum willst du das Rad neu erfinden. Kannst dir ja den erstellten Source anschauen den der Wizard produziert.