Windoes Service Status ?



  • Hi all,

    I have an C# Windows Service and a QT GUI. Now I want to check the running status out of the GUI.

    I know that I get the status via dos command "sc query myserive"

    Is there no method or instance to get the Servicestatus ?

    Regards



  • First of all, this is no Qt related question.
    You can use the windows service api.

    If you follow this "link":http://www.lmgtfy.com/?q=windows+service+api , you come to this "result":http://msdn.microsoft.com/en-us/library/ms685141(v=vs.85).aspx



  • The question was if I can use a command like

    QtService->getstatus("servicename");



  • Or like this. But this is C#

    ServiceController sc = new ServiceController("Spooler", "Server1");

    if (sc.Status == ServiceControllerStatus.Running)
    {
    MessageBox.Show("The service is running.");
    }



  • The C# code uses the "Win32 Service api":http://msdn.microsoft.com/en-us/library/ms685942(v=VS.85).aspx , that can be done.
    like this:

    @
    SC_HANDLE hScManager = OpenSCManager(0, // local computer or add computer name here
    0, // SERVICES_ACTIVE_DATABASE database is opened by default.
    GENERIC_READ); // onyl read info
    if(0 != hScManager)
    {
    SC_HANDLE hSvc = OpenService(hScManager, // service manager
    "Spooler", // service name
    GENERIC_READ); // onyl read info
    if(0 != hSvc)
    {
    SERVICE_STATUS_PROCESS sInfo;
    DWORD bytesNeeded = 0;

            if(QueryServiceStatusEx(hSvc,                   // A handle to the service. 
                                    SC_STATUS_PROCESS_INFO, // info requested
                                    &sInfo,                 // structure to load info to
                                    sizeof(sInfo),          // size of the buffer
                                    &bytesNeeded))
            {
                if(sInfo.dwCurrentState == SERVICE_RUNNING)
                {
                    QMessageBox::information(0, tr("MyApp"), tr("Service is running"));
                }
            }
        }
    }
    

    @

    Warning: the code is not tested, just build from the documentation without compilation. Might need some adjustments.



  • Thanks alot,

    i have it. This is the working code.

    @LPCWSTR ServiceName = L"My ServiceName";

    SC_HANDLE hScManager = OpenSCManager(0, // local computer or add computer name here
    0, // SERVICES_ACTIVE_DATABASE database is opened by default.
    GENERIC_READ); // onyl read info
    if(0 != hScManager)
    {
    SC_HANDLE hSvc = OpenService(hScManager, // service manager
    ServiceName, // service name
    GENERIC_READ); // onyl read info
    if(0 != hSvc)
    {
    SERVICE_STATUS_PROCESS sInfo;

        DWORD bytesNeeded = 0;
         
        if(QueryServiceStatusEx(hSvc,                   // A handle to the service. 
                                SC_STATUS_PROCESS_INFO, // info requested
                                (LPBYTE)&sInfo,                 // structure to load info to
                                sizeof(sInfo),          // size of the buffer
                                &bytesNeeded))
        {
            if(sInfo.dwCurrentState == SERVICE_RUNNING)
            {
                traymessage("test", "start!!!", 3);
            }
            else
            {
                  traymessage("test", "stop!!!", 3);
            }
        }
    }
    

    }@


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.