Windows Dienste(z.B. Netzwerk Dienst)



  • Tach!

    Wie kann man einen Dienst unter Windows XP Starten bzw. Beenden??

    Danke im Voraus!



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Google ist dein Freund:

    ➡ Starting a Service

    Greetz, Swordfish



  • Also folgendes!

    Ich habe mir mal folgenden Code zusammen geschnitten, um den Nachrichtendienst zu starten:

    SC_HANDLE schSCManager;
    
    // Open a handle to the SC Manager database.
    
    schSCManager = OpenSCManager(
        NULL,                    // local machine
        NULL,                    // ServicesActive database
        SC_MANAGER_ALL_ACCESS);  // full access rights
    
    if (NULL == schSCManager) 
        Label1->Caption = "Fehler!" ;
    
        SC_HANDLE schService;
        SERVICE_STATUS_PROCESS ssStatus;
        DWORD dwOldCheckPoint; 
        DWORD dwStartTickCount;
        DWORD dwWaitTime;
        DWORD dwBytesNeeded;
    
        schService = OpenService(
            schSCManager,          // SCM database
            "Nachrichtendienst",          // service name
            SERVICE_ALL_ACCESS);
    
         StartService(
                schService,  // handle to service
                0,           // number of arguments
                NULL);
    

    Nur leider startet er nicht!

    Könnt ihr mir helfen????

    THx



  • *lol* das Ding heißt nicht "Nachrichtendienst" sondern "Messanger":

    #include <iostream>
    #include <string>
    
    #include <windows.h>
    
    using namespace std;
    
    string get_errmsg( unsigned long error );
    
    int main( )
    {
        SC_HANDLE sc;
    
        if( !( sc = OpenSCManager( 0, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE | GENERIC_READ ) ) ) {
    
            cout << "OpenSCManager() failed:" << endl;
            cout << get_errmsg( GetLastError( ) ) << endl;
            return EXIT_FAILURE;
        }
    
        SC_HANDLE messenger;
    
        if( !( messenger = OpenService( sc, "Messenger", SERVICE_START ) ) ) {
    
            CloseServiceHandle( sc );
            cout << "OpenService() failed:" << endl;
            cout << get_errmsg( GetLastError( ) ) << endl;
            return EXIT_FAILURE;
        }
    
        if( !StartService( messenger, 0, 0 ) ) {
    
            CloseServiceHandle( messenger );
            CloseServiceHandle( sc );
            cout << "OpenService() failed:" << endl;
            cout << get_errmsg( GetLastError( ) ) << endl;
            return EXIT_FAILURE;
        }
    
        cout << "Service \"Messenger\" has been started!" << endl;
    
        CloseServiceHandle( sc );
        return EXIT_SUCCESS;
    }
    
    string get_errmsg( unsigned long error )
    {
        void *buffer;
        FormatMessage(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
            0,
            error,
            MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
            reinterpret_cast< char* >( &buffer ),
            0,
            0
        );
    
        string errmsg = string( reinterpret_cast< char* >( buffer ) );
        LocalFree( buffer );
        return errmsg;
    }
    

    Greetz, Swordfish



  • THx!!!!!!!!!!!

    Jetzt is da noch ein kleines problem, das starten und beenden geht einwandfrei!!!!
    Aber wenn ich jetzt die Einstellungen des Dienstes auf 'Deaktiviert' und nicht wie üblich auf 'Manuell' habe, dann wird der Dienst nicht Aktiviert, wie stelle ich es nun an, ihn zu Aktivieren (Wenn er auf 'Manuell' Eingestellt ist, dann lässt er sich starten und beenden)?????



  • ➡ ChangeServiceConfig()

    Greetz, Swordfish



  • Hmmm:

    SC_HANDLE sc;
    SC_HANDLE messenger;
    
    sc = OpenSCManager(0, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE | GENERIC_READ);
    messenger = OpenService(sc, "Messenger", SERVICE_START);
    
    ChangeServiceConfig(
      messenger,
      SERVICE_FILE_SYSTEM_DRIVER,
      SERVICE_AUTO_START,
      SERVICE_ERROR_NORMAL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL
    );
    

    Ich möchte jetzt, dass der 'Nachrichtendiesnt' Automatisch geöffnet wird!

    Was mach ich falsch?



  • Hab ich schon hinbekommen!


Anmelden zum Antworten