From 10:00 CET Friday 22nd November we will adjust how the server works to deal with some recently reported problems. Therefore there may be a load problem, if you experience more problems than usual trying to access the forum then please PM AndyS or any of the moderators so they can inform me.


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