2009-08-21 8 views
6

저는 매월 모든 직원에게 이메일을 발송하는 간단한 Windows 서비스를 작성하고 있습니다. 내 질문은 그것이 완료되면 어떻게 멈추는가? 나는이 분야의 noobie이므로 제발 도와주세요. 정말 감사합니다.프로그래밍 방식으로 Windows 서비스를 중지하는 방법은 무엇입니까?

매월 실행되도록 서버에 배포됩니다. 나는이 일을 시작하지 않았고 코드는 나에게 그렇게 주어졌다. 그것은 VB.NET로 작성되었으며 지금은 주위에 몇 가지를 변경하려면 부탁드립니다. 나는 'Sub OnStart'만 있고 서비스가 언제 중단 될지 궁금해했다. 주요 하위 작업이 완료되면이 서비스의 상태는 어떻습니까? 멈추거나 거기에 매달려 있습니까? 미안 해요, 내가 말했듯이, 난 정말이 ....

답변

7

당신은 월별로 작업을하는 경우 콘솔 응용 프로그램을 작성하는 것이 더 좋을 수 있으며, Windows Task Scheduler을 사용하여 매월 실행되도록 설정할 수 있습니다. 서비스가 오랫동안 또는 지속적으로 실행해야하는 프로세스에 대해 로그온 한 사용자 또는 로그온하지 않은 상태로 사용해야합니다.

+0

서버에 배포되어 매월 실행됩니다. 나는이 일을 시작하지 않았고 코드는 나에게 그렇게 주어졌다. 그것은 VB.NET로 작성되었으며 지금은 주위에 몇 가지를 변경하려면 부탁드립니다. 나는 'Sub OnStart'만 있고 서비스가 언제 중단 될지 궁금해했다. 주요 하위 작업이 완료되면이 서비스의 상태는 어떻습니까? 멈추거나 거기에 매달려 있습니까? 미안, 내가 말했듯이, 나는 이것에 정말로 새로운 사람이다. ... – cplusplusNewbie

+1

이번이 처음이라면, 이것은 자신을 좋게 보이게하고 의사 결정자에게 매크로의 제안으로 접근하는 좋은 시간이다. 서비스는 한 달에 한 번 사용하지 않으며 연속적입니다. 앞에서 언급 한 경우 Windows 서비스에서 코드를 콘솔 응용 프로그램으로 가져 오는 것은 매우 간단합니다. – MattH

3

이 서비스가 Win32 서비스 (예 : C 또는 C++로 작성된 경우)이면 SetServiceStatus SERVICE_STOPPED) ServiceMain에서 리턴하십시오.

다른 한편으로, 한 달에 한 번 이메일을 보내는 경우 왜 서비스를 전혀 사용하지 않습니까? Windows 작업 스케줄러를 사용하고 일반 응용 프로그램이나 스크립트를 실행하십시오.

0

예약 된 작업으로 쓰는 것이 더 좋을 수도 있지만 처음 개발하는 것이 더 쉽습니다. 그런 다음 자연스럽게 종결되고 나머지 개월 동안 자원을 소비하지 않을 것입니다.

services = System.ServiceProcess.ServiceController.GetServices(); 

그럼 당신은 C#에서 현재 실행중인 서비스의 목록을 얻을 수 있습니다, 원래의 질문에 대답 당신이 원하는 일을 찾아서 설정 상태를 중지 할하려면

locatedService.Status == ServiceControllerStatus.Stopped 

전체 예 : on msdn

0

net stop [service_name] ... 명령 행에서도 마찬가지입니다.

그러나 나는 다른 모든 사람들과 동의합니다. Windows Task Scheduler가 사용자의 요구를 더 잘 충족시키는 것으로 보입니다.

6

다른 모든 대답에서 알 수 있듯이이 스크립트는 예약 된 작업으로 실행되는 실행 파일 또는 스크립트 여야합니다.

그러나 Windows 서비스로 실행해야 할 의무가 있고 .NET에서 작업해야하는 경우 서비스가 완료되면 ServiceBase에서 상속 된 Stop() 메서드를 호출하면됩니다. 방법에 대한 MSDN 문서에서 :

Stop 메소드는 보류 정지를 표시하기 위해 서비스 상태 를 설정하고 이를 OnStop 메서드를 호출합니다. 응용 프로그램이 중지 된 후 서비스 상태가 중지됨으로 설정됩니다. 응용 프로그램이 호스팅 된 서비스 인 경우 응용 프로그램 도메인이 언로드됩니다.

여기에 중요한주의 사항이 있습니다. 서비스를 실행하는 사용자 계정에 서비스를 중지 할 수있는 권한이 있어야합니다 (ServerFault의 주제).서비스 자체 또는에서 내 Stop 를 호출하여

  • , 프로그램, :

    서비스의 OnStart 메소드가 완료되면

    , 그것은 뭔가 다음 중 한 가지 방법으로 중지를 지시 할 때까지 (아무것도하지 않고) 계속 실행됩니다 외부 프로세스 using the method Colin Gravill describes in his answer.
  • 명령 줄을 통해.
  • 컴퓨터 관리 콘솔의 "서비스"패널을 통해.
0

Windows 서비스해야하는 이유가 있나요? 그렇지 않다면 @Macros 솔루션을 따르십시오. 그러나 그렇다면 왜 서비스를 중지해야합니까? 중지하면 전자 메일을 보내야 할 때 다시 시작하면됩니다. 설명에 따르면 많은 리소스가 필요한 것처럼 들리지 않으므로 설치하고 실행하도록 제안하고 이메일을 보내려면 한 달에 한 번씩 실행하십시오.

0

여기는 비슷한 상황에서 내가 한 것입니다.

Windows 서비스는 연중 무휴로 운영되며 작업 단위를 처리합니다. 데이터베이스보기를 통해 작업 단위를 가져옵니다.

테이블 메시지
  ProcessingStartTime
  CompletionDTE
  ...

데이터베이스보기는 기록이 완성되지 표시되고 과거에 ProcessingStartTime을 가져옵니다. 따라서 서비스가 트랜잭션을 확인한 후 데이터베이스 레코드를 업데이트하는 저장 프로 시저를 실행합니다. 이 시스템의 경우 최종 사용자 업로드 파일을 asp.net webfrom에 업로드하여 파일을 데이터베이스로 가져옵니다.

관련 문제