C\#Windows Service 를 사용 하 는 간단 한 튜 토리 얼(생 성,설치,마 운 트 해제,디 버 깅)

9302 단어 C#WindowsService
선언:Microsoft Windows 서 비 스 는 자신의 Windows 세 션 에서 장시간 실행 할 수 있 는 실행 가능 한 프로그램 을 만 들 수 있 습 니 다.이 서 비 스 는 컴퓨터 가 시 작 될 때 자동 으로 시작 할 수 있 으 며 일시 정지 와 재 시작 이 가능 하 며 사용자 인터페이스 가 표시 되 지 않 습 니 다.이 는 서 비 스 를 서버 에서 사용 하거나 언제든지 같은 컴퓨터 에서 일 하 는 다른 사용자 에 게 영향 을 주지 않 기 위해 장시간 기능 을 실행 해 야 할 때 사용 하기에 매우 적합 하 다.로그 인 사용자 와 다른 특정 사용자 계 정 이나 기본 컴퓨터 계 정의 보안 컨 텍스트 에서 도 서 비 스 를 실행 할 수 있다.본 고 는 C\#를 어떻게 활용 하여 Windows 서비스 프로그램 을 만 들 고 설치 하 며 마 운 트 해제 하고 디 버 깅 하 는 지 소개 한다.
1.Windows 서비스 만 들 기
1)VS 로 윈도 서비스 항목 새로 만 들 기

2)기본 생 성 파일 은 Program.cs,Service1.cs 를 포함한다.서비스 1.cs 라 는 이름 을 바 꾸 거나 서비스 1.cs 파일 을 삭제 한 다음 서비스 파일 을 만 듭 니 다.서비스 이름 을 MyService 라 고 가정 합 니 다.메모:Service1.cs 파일 을 삭제 하고 자신의 서비스 파일 을 만 들 려 면 Program.cs 파일 에 있 는 Service1 을 MyService 로 수정 해 야 합 니 다.
MyService.cs 속성 창 에서 관련 속성 은 다음 과 같 습 니 다.
Autolog 시스템 로그 파일 을 자동 으로 쓸 지 여부
CanHandlePowerEvent 서비스 시 전원 이벤트 수락
CanPauseAndContinue 서비스 가 일시 정지 또는 계속 실행 요청 을 받 아들 일 지 여부
OnShut Down 프로 세 스 를 호출 할 수 있 도록 컴퓨터 가 꺼 졌 을 때 알림 을 받 았 는 지 여부 입 니 다.
CanStop 서비스 가 실행 중지 요청 을 받 아들 일 지 여부
서비스 이름
메모:CanPauseAndContinue 와 CanShutdown 의 기본 값 은 모두 False 입 니 다.서비스의 OnPause(),OnContinue(),OnShutdown()이 작용 하려 면 CanPauseAndContinue 와 CanShutdown 속성 값 을 True 로 설정 해 야 합 니 다.
3)MyService.cs 서비스 파일 을 더 블 클릭 하고 왼쪽 디자인 모드 에서 오른쪽 단 추 를 누 르 면'설치 프로그램 추가'(또는 MyService.cs 의 속성 창 아래 에'설치 프로그램 추가'를 클릭 합 니 다.'설치 프로그램 추가'가능 한 링크 가 보이 지 않 으 면 속성 창 을 오른쪽 클릭 하고'명령(C)'을 누 르 면 나 옵 니 다.메모:파일 속성 창 이 아 닌 속성 창 입 니 다)Projectinstaller.cs 파일 과 두 개의 설치 구성 요 소 를 자동 으로 생 성 합 니 다.다음 과 같 습 니 다.

4)"serviceProcessInstaller 1"을 누 르 면 속성 창 에 account 계 정 방식 을 설정 하고 LocalService 로 권장 합 니 다(물론 account 속성 을 Local System 으로 바 꿀 수도 있 습 니 다.그러면 어느 사용자 로 로그 인 하 든 서 비 스 는 항상 시 작 됩 니 다).
5)"serviceInstaller 1"을 누 르 면 속성 창 에 속성 을 설정 합 니 다.
a)서비스 설명 을 설명 하고 Windows 서비스 목록 에 있 는 설명 을 직접 표시 합 니 다.
b)DisplayName 서비스 가 이름 을 표시 하고 Windows 서비스 목록 의 이름 을 직접 표시 합 니 다.
c)서비스 Name 서비스 프로 세 스 이름,서 비 스 를 설치 하고 마 운 트 해제 할 때 유일한 표지 입 니 다.
구체 적 인 설정 은 위의 그림 과 같다.
6)설치 서비스 일괄 처리 파일 Install.bat 를 만 들 고 메모 장 을 만 든 다음 접 두 사 를 bat 로 수정 할 수 있 습 니 다.메모 장 내용 은 다음 과 같 습 니 다.
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exeWindowsServiceDemo.exe
Net StartMyService
sc config MyServicestart= auto
pause
메모:메모 장 을 다른 이름 으로 저장 할 때 인 코딩 을 ANSI 로 설정 합 니 다.
설명:두 번 째 행 위 는 서 비 스 를 시작 하고 세 번 째 행 위 는 서 비 스 를 자동 으로 실행 하도록 설정 하 며 이 두 줄 은 서비스 형식 에 따라 스스로 선택한다.스 크 립 트 실행 상 태 를 볼 필요 가 있 으 면 스 크 립 트 마지막 줄 에 pause 를 추가 합 니 다.
7)마 운 트 해제 서비스 일괄 처리 파일 Uninstall.bat 를 만 드 는 것 과 같이 내용 은 다음 과 같 습 니 다.
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /uWindowsServiceDemo.exe
pause
8)Install.bat 와 Uninstall.bat 두 파일 을 bin\\Debug 디 렉 터 리 에 추가 합 니 다.이 솔 루 션 의 디 렉 터 리 구 조 는 다음 과 같 습 니 다.

9)서비스 코드 를 작성 하고 텍스트 파일 에 텍스트 기록 시스템 시간 을 기록 하 는 것 을 예 로 들 면:

using System;
using System.IO;
using System.Diagnostics;
using System.ServiceProcess;
using System.Timers;

namespace WindowsServiceDemo
{
 public partial class MyService : ServiceBase
 {
 private Timer time = new Timer();
 public MyService()
 {
 InitializeComponent();
 }

 protected override void OnStart(string[] args)
 {
 #if DEBUG
 if (!Debugger.IsAttached)
 Debugger.Launch();
 Debugger.Break();
 #endif
 WriteLog("    ,  :" + DateTime.Now.ToString("HH:mm:ss") + "\r
"); time.Elapsed += new ElapsedEventHandler(MethodEvent); time.Interval = 60 * 1000;// 2 time.Start(); } protected override void OnStop() { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog(" , :" + DateTime.Now.ToString("HH:mm:ss") + "\r
"); } protected override void OnPause() { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog(" , :" + DateTime.Now.ToString("HH:mm:ss") + "\r
"); base.OnPause(); } protected override void OnContinue() { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog(" , :" + DateTime.Now.ToString("HH:mm:ss") + "\r
"); base.OnContinue(); } protected override void OnShutdown() { WriteLog(" , :" + DateTime.Now.ToString("HH:mm:ss") + "\r
"); base.OnShutdown(); } private void MethodEvent(object source, System.Timers.ElapsedEventArgs e) { time.Enabled = false; string result = string.Empty; try { //......... result = " , :" + DateTime.Now.ToString("HH:mm:ss") + "\r
"; } catch (Exception ex) { result = " , :" + ex.Message + "\r
"; } finally { WriteLog(result); time.Enabled = true; } } /// <summary> /// /// </summary> /// <param name="logInfo"></param> private void WriteLog(string logInfo) { try { string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs"; if (!Directory.Exists(logDirectory)) { Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch { } } } }
메모:코드 작성 이 완료 되면 시작 단 추 를 누 르 거나 F5 를 누 르 면 서 비 스 를 실행 하거나 디 버 깅 할 수 없습니다.다음 그림 과 같은 경고 가 표 시 됩 니 다.

윈도 우즈 서비스 설치
프로젝트 생 성 에 성공 한 후 bin\Debug 디 렉 터 리 로 위치 하고 관리자 로 Install.bat 설치 서 비 스 를 실행 합 니 다.성공 결 과 는 다음 그림 과 같 습 니 다.

이때'내 컴퓨터'는 오른쪽 단 추 를 누 르 고'관리'를 선택 하 며'서비스 와 응용 프로그램'의'서비스'를 선택 하면 서비스 가 설치 되 어 있 는 것 을 볼 수 있다.다음 그림 과 같다.

또한 Debug 폴 더 에는 Logs 폴 더 가 있 고 Logs 폴 더 에는 txt 문서 가 있 습 니 다.내용 은 다음 과 같 습 니 다.

분당 한 번 씩 실행 되 는 것 을 볼 수 있다.
3.windows 서비스 디 버 깅
1)일반적인 처리 방법 은 service 가 실 행 된 후에 디 버 거 에서'프로 세 스 에 추가'를 선택 하고 자신의 서 비 스 를 추가 하면 디 버 깅 할 수 있 습 니 다.그러나 이 방법 은 한계 가 있다.예 를 들 어 서비스 가 시 작 될 때의 OnStart 이벤트 의 코드 는 기본적으로 디 버 깅 하기 어렵다.흔히 attach 가 우리 의 서비스 에 들 어 왔 을 때 이 부분의 코드 는 이미 실행 되 었 다.물론 OnStart 사건 전에 20s 를 자게 하고 서비스 가 잘 때 빨리 프로 세 스 에 추가 할 수 있 습 니 다.System.Threading.Thread.Sleep(1000 * 20);
2)제 방법 은 OnStart 사건 의 시작 부분 에'Debugger.Launch()'를 붙 이 는 것 입 니 다.이 호출 은 service 가 실 행 될 때 디 버 거 를 선택 하 는 대화 상자 가 나타 나 고 현재 위치 에서 일시 정지 합 니 다.이렇게 해서 우 리 는 코드 에서 수 동 으로 디 버 거 를 시작 할 수 있 었 다.
설명:a)Debugger.Launch()방법의 역할 은"디 버 거 를 시작 하고 프로 세 스 에 연결 하 는 것"입 니 다.
b)정지점 을 수 동 으로 설정 할 수도 있 고'Debugger.Break()'을 사용 할 수도 있 습 니 다.동적 설정 정지점;
c)여러 디 버 거 인 스 턴 스 를 피하 기 위해"Debugger.IsAttached"속성 으로 디 버 거 가 프로 세 스에 추가 되 었 는 지,코드 세 션 을 판단 할 수 있 습 니 다.
             if (!Debugger.IsAttached) Debugger.Launch();
d)디버그 를 Debug 모드 에서 만 적용 하기 위해 Release 모드 에서 유효 하지 않 습 니 다.조건 컴 파일 로 처리 할 수 있 습 니 다.코드 세 션 은 다음 과 같 습 니 다.

#if DEBUG
 if (!Debugger.IsAttached)
 Debugger.Launch();
 Debugger.Break();
 #endif

조건 컴 파일 에 관 해 서 는 나의 다른 블 로 그 를 보십시오C\#-\#define 조건 컴 파일
e)디 버 깅 서비스의 다른 이벤트 나 방법 에 도 사용 할 수 있 습 니 다.
디 버 거 를 선택 하 는 대화 상자 와 디 버 깅 인터페이스 가 다음 그림 과 같 습 니 다.


4.윈도 우즈 서비스 마 운 트 해제
마 운 트 해제 서 비 스 는 관리자 로 서 Uninstall.bat 를 실행 하면 됩 니 다.성공 결 과 는 다음 그림 과 같 습 니 다.

참조 링크:https://msdn.microsoft.com/zh-cn/library/windows/desktop/system.diagnostics.debugger(v=vs.110).aspx
원본 다운로드:http://xiazai.jb51.net/201701/yuanma/WindowsService(jb51.net).rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기