MFC und Service
-
Hallo,
ich habe folgendes Problem:
Ich soll eine Dialogfeld basierte Anwendung (MFC) als Dienst laufen lassen. Soweit so gut. Ich bin dazu in der Lage mein Programm als Service zu installieren, deinstallieren und sogar laufen zu lassen. Der Knackpunkt: Das geht NUR wenn ich aktiv angemeldet bin. Es ist ein interaktiver Service der unter dem lokalen Systemkonto läuft. (anders geht es gar nicht ^^)
Meine Frage ist:
Warum wird der Dienst nicht beim Systemstart gestartet, sondern erst wenn ich mich anmelde. Kann es damit was zu tun haben das ich im Programm Window Messages verschicke? Gibt es da einen Workaround?Gruß und danke für Eure hoffentlich zahlreichen Tipps
,
Christian
-
Boh, schon mal in die MFC-Doku reingeschaut???
Da steht drin, das MFC nicht für Windows Dienste geeignet ist. Damit hat sich dein "Problem" von alleine gelöst.
-
????
Siehe: CNTService v1.06 - NT Service Framework (A class framework for developing NT services in MFC)
http://www.codeproject.com/system/cntservice.aspUnd auch sonst viele Beispiele:
http://www.codeproject.com/system/#ServicesSiehe: Creating a Simple Win32 Service in C++
http://msdn.microsoft.com/library/en-us/dndllpro/html/msdn_ntservic.asp
-
Mmm, sehr konstruktive Antworten...
Mein Programm läuft schon als Dienst. (kam vielleicht nicht ganz klar rüber)
Es startet halt nur nicht beim System Start... (nur wenn ich mich einlogge)
Nur, warum?D.h. ich will nicht wissen wie man einen Dienst proggt. Dazu sage ich nur RTFM...
-
Upps... (lesen sollte man halt können
)
Wie sehen denn Deine Regsitry-Einträge für den Service aus?
Oder was übergibst Du genau bei CreateService?
-
Eigentlich nichts besonderes...
Ich habe mir die Doku zu der Funktion schon zig mal durch gelesen, aber leider keinen Hinweis gefunden...Hier der CreateService Aufruf:
SC_HANDLE vfService = CreateService(scm, TEXT("myService"), TEXT("Service Name"), SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, path.GetBuffer(), NULL, NULL, NULL, NULL, NULL);
-
Hmmm.... sollte eigentlich gehen... Irgendwelche Einträge in der Ereignisanzeige?
-
Leider nichts was mich weiter bringen würde...