Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. a bother about windows service

a bother about windows service

Scheduled Pinned Locked Moved C / C++ / MFC
debuggingquestion
5 Posts 2 Posters 2 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jinjiashan
    wrote on last edited by
    #1

    Hi,all I have a windows service program with a service,and I can use "myservice/service" in cmd.exe,it sucess! then,I can see the service in control pane,I also can start up this service; But, this service can't run my code;:confused:why?? the whole code here void yourfunction() { for (int a =0; a<10; a++) ::MessageBoxA(NULL, "ggg", "ghgh" ,MB_OK); } SERVICE_STATUS ServiceStatus = { SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_STOPPED, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_PAUSE_CONTINUE, 0,0,0,0 }; TCHAR szSvName[]=TEXT("Myservice1"); SERVICE_STATUS_HANDLE hStatus; SC_HANDLE SCMger; void WINAPI ControlHandler(DWORD request); void ServiceMain(int argc, char* argv); void CreateMyService() { SCMger=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); CreateService( SCMger, szSvName, szSvName, SERVICE_START, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, TEXT("c:\\myservice1.exe"), NULL, NULL, NULL, NULL, NULL); } int main() { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = szSvName; ServiceTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc= NULL; if(StartServiceCtrlDispatcher(ServiceTable)==0)CreateMyService(); } //this fun also can't be debug,can't run void ServiceMain(int argc, char* argv) { hStatus = RegisterServiceCtrlHandler(szSvName,ControlHandler); ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN; SetServiceStatus(hStatus,&ServiceStatus); ServiceStatus.dwWin32ExitCode = NO_ERROR; ServiceStatus.dwCheckPoint = 0; serviceStatus.dwWaitHint = 0; ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(hStatus,&ServiceStatus); yourfunction(); ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus,&ServiceStatus); } //this fun can't be debug,can't run void WINAPI ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_SHUTDOWN: ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus,&ServiceStatus); break; } }

    J R 2 Replies Last reply
    0
    • J jinjiashan

      Hi,all I have a windows service program with a service,and I can use "myservice/service" in cmd.exe,it sucess! then,I can see the service in control pane,I also can start up this service; But, this service can't run my code;:confused:why?? the whole code here void yourfunction() { for (int a =0; a<10; a++) ::MessageBoxA(NULL, "ggg", "ghgh" ,MB_OK); } SERVICE_STATUS ServiceStatus = { SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_STOPPED, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_PAUSE_CONTINUE, 0,0,0,0 }; TCHAR szSvName[]=TEXT("Myservice1"); SERVICE_STATUS_HANDLE hStatus; SC_HANDLE SCMger; void WINAPI ControlHandler(DWORD request); void ServiceMain(int argc, char* argv); void CreateMyService() { SCMger=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); CreateService( SCMger, szSvName, szSvName, SERVICE_START, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, TEXT("c:\\myservice1.exe"), NULL, NULL, NULL, NULL, NULL); } int main() { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = szSvName; ServiceTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc= NULL; if(StartServiceCtrlDispatcher(ServiceTable)==0)CreateMyService(); } //this fun also can't be debug,can't run void ServiceMain(int argc, char* argv) { hStatus = RegisterServiceCtrlHandler(szSvName,ControlHandler); ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN; SetServiceStatus(hStatus,&ServiceStatus); ServiceStatus.dwWin32ExitCode = NO_ERROR; ServiceStatus.dwCheckPoint = 0; serviceStatus.dwWaitHint = 0; ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(hStatus,&ServiceStatus); yourfunction(); ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus,&ServiceStatus); } //this fun can't be debug,can't run void WINAPI ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_SHUTDOWN: ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus,&ServiceStatus); break; } }

      J Offline
      J Offline
      jinjiashan
      wrote on last edited by
      #2

      who can help me?

      J 1 Reply Last reply
      0
      • J jinjiashan

        who can help me?

        J Offline
        J Offline
        jinjiashan
        wrote on last edited by
        #3

        ?????

        1 Reply Last reply
        0
        • J jinjiashan

          Hi,all I have a windows service program with a service,and I can use "myservice/service" in cmd.exe,it sucess! then,I can see the service in control pane,I also can start up this service; But, this service can't run my code;:confused:why?? the whole code here void yourfunction() { for (int a =0; a<10; a++) ::MessageBoxA(NULL, "ggg", "ghgh" ,MB_OK); } SERVICE_STATUS ServiceStatus = { SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_STOPPED, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_PAUSE_CONTINUE, 0,0,0,0 }; TCHAR szSvName[]=TEXT("Myservice1"); SERVICE_STATUS_HANDLE hStatus; SC_HANDLE SCMger; void WINAPI ControlHandler(DWORD request); void ServiceMain(int argc, char* argv); void CreateMyService() { SCMger=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); CreateService( SCMger, szSvName, szSvName, SERVICE_START, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, TEXT("c:\\myservice1.exe"), NULL, NULL, NULL, NULL, NULL); } int main() { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = szSvName; ServiceTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc= NULL; if(StartServiceCtrlDispatcher(ServiceTable)==0)CreateMyService(); } //this fun also can't be debug,can't run void ServiceMain(int argc, char* argv) { hStatus = RegisterServiceCtrlHandler(szSvName,ControlHandler); ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN; SetServiceStatus(hStatus,&ServiceStatus); ServiceStatus.dwWin32ExitCode = NO_ERROR; ServiceStatus.dwCheckPoint = 0; serviceStatus.dwWaitHint = 0; ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(hStatus,&ServiceStatus); yourfunction(); ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus,&ServiceStatus); } //this fun can't be debug,can't run void WINAPI ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_SHUTDOWN: ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus,&ServiceStatus); break; } }

          R Offline
          R Offline
          Rolf Kristensen
          wrote on last edited by
          #4

          When implementing a service, then it can be a good idea to make it react to a command-line parameter to control whether it should run as a service or as a standard console application. When needing to debug/test the service-functionality, then you just start it as a standard console application. There are serveral NT-Service wrappers, that makes it easy to implement the standard NT-service interface: http://www.naughter.com/serv.html[^] http://msdn.microsoft.com/en-us/library/bb540476.aspx[^] http://msdn.microsoft.com/en-us/library/ms810429.aspx[^]

          J 1 Reply Last reply
          0
          • R Rolf Kristensen

            When implementing a service, then it can be a good idea to make it react to a command-line parameter to control whether it should run as a service or as a standard console application. When needing to debug/test the service-functionality, then you just start it as a standard console application. There are serveral NT-Service wrappers, that makes it easy to implement the standard NT-service interface: http://www.naughter.com/serv.html[^] http://msdn.microsoft.com/en-us/library/bb540476.aspx[^] http://msdn.microsoft.com/en-us/library/ms810429.aspx[^]

            J Offline
            J Offline
            jinjiashan
            wrote on last edited by
            #5

            :) thank you Snakefoot, I finish it;

            1 Reply Last reply
            0
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • World
            • Users
            • Groups