Einen Service erstellen



  • Hi,
    ich möchte eine Anwendung als Service erstellen.
    Wie ich einen Service installieren kann lese ich mir gerade an.

    Ich frage mich allerdings welche Anforderungen an die EXE die als
    Service eingetragen werden soll gestellt werden.

    Gibt es da etwas besonderes zu beachten? Die Service.exe muss dann doch
    ganz speziell beschaffen sein nehme ich an?

    bye
    Alloi :xmas1:



  • Der Service wird wohl irgendwie mit dem Service-Manager kommunizieren
    müssen, da du der vermutlich ne Rückinfo braucht, ob der Dienst auch
    gestartet werden konnte.

    Ich glaube da können die Spezi hier im Forum mehr zu sagen ➡



  • Ok nach längerer Suche habe ich auch nichts gefunden. Interessant ist es
    allemal. Man kann ja ganz einfach einen Service in Windows anlegen und
    auf eine Datei laufen lassen.

    Aber wie du schon sagtest...bei mir will er die GUI.exe nicht starten,
    die im Service verankert ist.

    Kann jemand dazu klärend beitragen?! Ich erhalte immer Fehler 1053: Der
    Dienst antwortet nicht rechtzeitig auf Start - Steuerungsaufforderung.
    Der Dienst konnte nicht gestartet werden.

    Man kann also nicht jede beliebige EXE asl "Dienst" angeben. Aber wie muss
    eine korrekte Service.exe dann aussehen? Diese muss dann ja als Mittler die
    GUI.exe aufrufen?





  • Frage zum Service, den man mit dem Visual Studio ja auch als Projekt anlegen
    kann:

    Wo kann man da eigenen Code platzieren?

    /// <summary>
    		/// Führen Sie die Vorgänge aus, um den Dienst zu starten.
    		/// </summary>
    		void OnStart(String* args[])
    		{
    myprotectedfunction();
    	// TODO: Fügen Sie hier Code hinzu, um Ihren Dienst zu starten.
    		}
    

    In OnStart() kann ja nicht sein, da dort nur der Dienst gestartet wird.
    Man muss also auf eine eigene Funktion verzweigen, nur wann und wo?

    In OnStart() führt dazu, dass der Status vom Service immer auf "wird gestartet" steht...



  • Bevor sich jemand die Mühe macht. Ich muss einen Thread erzeugen.
    Das habe ich mir nun bereits angelesen.

    Aber warum kann ich meinen Thread nicht aus meinem Programm
    raus beenden?

    SERVICE_STATUS ssStatus; 
            if (!ControlService(hService, SERVICE_CONTROL_STOP, &ssStatus)) 
            return false;
    

    Hier erhalte ich Konvertierung des Parameters 3 von 'SERVICE_STATUS *__w64 ' in 'LPSERVICE_STATUS' nicht möglich.

    Dabei wird doch sogar in der MSDN ein solches Beispiel gezeigt.


  • Mod

    Ganz verstehe ich nicht was Du vorhast?
    Was für ein Service Projekt hast Du nun verwendet?
    Warum hast Du Jochens Link nicht verfolgt?

    Undnein: Im Allgemeinen musst Du keinen Thread erzeugen.



  • Es geht um http://msdn2.microsoft.com/en-gb/library/ms682108.aspx

    Wie legt man da die struct richtig an?
    Das hat aber wohl nichts mit dem Service selbst zu tun, sondern mehr
    damit wie man aus der eigenen Anwendung den Service z.B. stoppen
    und danach löschen kann (DeleteService/ControlService).

    Ohne den Service zu stoppen wird er erst nach einem Neustart gelöscht!

    Vielleicht kannst du ja ein funktionierendes Beispiel für die struct
    bringen?


  • Mod

    Ich verstehe immer weniger was Du willst.
    In dem Beispiel
    http://www.codeproject.com/system/serviceskeleton.asp
    ist doch alles drin?

    Weitere Code (wenn Du ihn lesen willst) hier
    http://www.naughter.com/serv.html



  • Was ist denn an dem Beispiel:
    http://www.codeproject.com/system/serviceskeleton.asp
    nicht funktionierend?


Log in to reply