개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.18 05:27

win32_set_service_status 함수 이해 도움이 필요합니다.

목록
  • 몽고DB러버 1일 전 2025.05.18 05:27
  • 2
    1
안녕하세요 선생님,
저는 현재 윈도우 서비스 관리에 대한 프로젝트를 진행 중인데요,
win32_set_service_status 함수를 사용하여 서비스의 상태를 변경하고 싶습니다.
하지만 함수의 매개변수 중 'dwCurrentState'와 'dwWin32ExitCode'의 차이점을 정확하게 이해하지 못하고 있습니다.
두 매개변수는 서비스의 상태를 나타내는 것인지, 아니면 서비스가 종료한 이유를 나타내는 것인지 궁금합니다.
그리고 서비스의 상태를 변경하는 예제 코드를 알려주시면 정말 감사하겠습니다.

감사합니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    win32_set_service_status 함수의 \'dwCurrentState\' 매개변수는 현재 서비스의 상태를 나타내며, 서비스가 시작 중, 실행 중, 중지 중, 또는 중지된 상태 중 하나를 지정할 수 있습니다.

    \'dwWin32ExitCode\' 매개변수는 서비스가 종료한 이유를 나타내며, 서비스가 정상적으로 종료되면 0이 반환됩니다.

    서비스가 비정상적으로 종료되면, 서비스가 종료한 이유를 나타내는 오류 코드가 반환됩니다.

    예를 들어, 서비스가 시스템 오류로 종료되면 1060이 반환됩니다.

    서비스의 상태를 변경하는 예제 코드는 다음과 같습니다.

    #hostingforum.kr
    python
    
    import win32serviceutil
    
    import win32service
    
    import win32event
    
    
    
    class MyService(win32serviceutil.ServiceFramework):
    
        _svc_name_ = 'MyService'
    
        _svc_display_name_ = 'My Service'
    
    
    
        def __init__(self, args):
    
            win32serviceutil.ServiceFramework.__init__(self, args)
    
            self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
    
    
    
        def SvcDoRun(self):
    
            self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
    
            try:
    
                self.ReportServiceStatus(win32service.SERVICE_RUNNING)
    
                # 서비스 로직을 수행합니다.
    
            except Exception as e:
    
                self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    
                raise
    
    
    
        def SvcStop(self):
    
            self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    
            win32event.SetEvent(self.hWaitStop)
    
    
    
    def main():
    
        service = MyService()
    
        service.start()
    
        win32serviceutil.ServiceController.WaitForStop(service._svc_name_)
    
        service.stop()
    
    
    
    if __name__ == '__main__':
    
        main()
    
    


    이 예제 코드에서는 서비스의 상태를 시작 중, 실행 중, 중지 중, 또는 중지된 상태 중 하나로 변경할 수 있습니다.

    서비스가 비정상적으로 종료되면, 서비스가 종료한 이유를 나타내는 오류 코드가 반환됩니다.

    이러한 예제 코드를 참고하여 서비스의 상태를 변경하는 코드를 작성할 수 있습니다.

    2025-05-18 05:28

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 20,624건 / 5 페이지

검색

게시물 검색