2016-05-15 20 views
-1

hier ist der Code meines Programms in Visual C++ geschrieben 6.0:Visual C++ und Fenster Dienste

#include <Windows.h> 
#include "stdafx.h" 
#include <stdlib.h> 
int APIENTRY WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR  lpCmdLine, 
        int  nCmdShow) 
{ 

    while(true) 
    { 
     int sleepInterval = rand()%15; 
     Sleep(sleepInterval*1000); 

     WinExec("notepad.exe" ,SW_SHOWNORMAL); 


    } 
     return 0; 
} 

Dann bewege ich die * .exe-Datei aus diesem Code erzeugt und es zu meinem Desktop. Ich fange es von dort an. Alles funktioniert, ich meine Notepad Editor Fenster erscheinen von Zeit zu Zeit. Dann habe ich Windows-Dienst mit dem folgenden Befehl von der Eingabeaufforderung erstellt: C: \ Dokumente und Einstellungen \ Administrator> sc create ThemesService2 binPath = "C: \ Dokumente und Einstellungen \ Administrator \ Desktop \ win32apphelloworld.exe" DisplayName = "Themen Service2 "start = auto

Das Ergebnis von der Eingabeaufforderung ist dies: [SC] CreateService SUCCESS Bis hier ist alles in Ordnung - ein Service erstellt wird und es muss automatisch gestartet werden, wenn Windows startet. Ich starte neu. Dann passiert nichts, die Fenster aus dem Notizblock erscheinen nicht. Ich öffne Services.msc über das Startmenü-> Ausführen. Der Dienst ist da, aber der Status ist leer, ich meine, sein Status ist nicht 'gestartet'. Der 'Starttyp' ist 'Automatisch', wie es sein sollte. Aber es ist nicht gestartet. Ich habe versucht, es manuell mit der rechten Maustaste zu starten und dann auf "Start" zu klicken. Es erscheint ein Hinweisfeld mit der Meldung: 'Fehler 1053: Der Dienst hat nicht rechtzeitig auf die Start- oder Steueranfrage reagiert'. Kann mir jemand sagen, aus welchem ​​Grund dieser Dienst nicht startet? Dank

+0

Die Dienste werden in einer anderen Sitzung ausgeführt, sodass Sie keines der Notizfenster sehen können. –

+0

Nun, ich wusste das nicht.Ok, aber sollte nicht der Service-Status immer noch "Gestartet" auch ich nicht Notizblock Windows sehen, wenn ich den Dienst in Services.msc überprüfen? Im Moment ist es nicht "Gestartet", was ich selbst als "Nicht laufen" verstehe? – citroen

+0

Ihr 'WinMain' kehrt nie zurück, was mit der Fehlermeldung übereinstimmt, die Sie erhalten. Das heißt, ich weiß nicht, ob Sie einen Dienst von einem regulären entschuldigen können. Ein Dienst ist erforderlich, um bestimmte Rückrufe zu implementieren. – IInspectable

Antwort

1

Ein Windows-Dienstprogramm ist nicht einfach eine ausführbare C++ - Datei, es muss bestimmte Funktionen implementieren, z. B. einen Diensteingangspunkt bereitstellen. In diesem Fall müssen Sie StartServiceCtrlDispatcher anrufen (damit Windows weiß, dass es anfangen sollte, mit dem Dienst zu kommunizieren), aber das wird nicht genug sein. Siehe MSDN Documentation for writing Service Programs.

Wenn Sie möchten, dass der Dienst mit dem Desktop interagieren kann, müssen Sie in den Diensteigenschaften die Option "Dienst mit dem Desktop interagieren" aktivieren.

EDIT: Wenn Sie nur ein Programm automatisch ausgeführt werden soll, wenn Windows startet können Sie immer add it to the startup folder oder zum appropriate registry key.

+0

Der Taskplaner ist ein weiterer Ort, an dem eine Anwendung registriert wird, die bei bestimmten Ereignissen ausgeführt wird. Es bietet mehr Flexibilität als der Autostart-Ordner und kann nicht so einfach deaktiviert werden. – IInspectable