C\#Windows Service 를 사용 하 는 간단 한 튜 토리 얼(생 성,설치,마 운 트 해제,디 버 깅)
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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.