C\#를 사용 하여 Windows 서비스의 인 스 턴 스 코드 를 만 듭 니 다.
9843 단어 C#Windows 서비스
개발 환경
운영 체제:Windows 10 X64
개발 환경:VS 2015
프로 그래 밍 언어:C\#
.NET 버 전:.NET Framework 4.0
대상 플랫폼:X86
2.Windows 서비스 만 들 기
1.Windows 서 비 스 를 새로 만 들 고 프로젝트 이름 을'MyWindowsService'로 바 꿉 니 다.다음 그림 과 같 습 니 다.
2.솔 루 션 자원 관리자 에서 Service1.cs 를 MyService1.cs 로 변경 한 후"코드 보기"아이콘 단 추 를 누 르 면 코드 편집기 인터페이스 에 들 어 갑 니 다.아래 그림 과 같 습 니 다.
3.코드 편집기 에 다음 코드 를 입력 하면 다음 과 같 습 니 다.
using System;
using System.ServiceProcess;
using System.IO;
namespace MyWindowsService
{
public partial class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
}
string filePath = @"D:\MyServiceLog.txt";
protected override void OnStart(string[] args)
{
using (FileStream stream = new FileStream(filePath,FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine($"{DateTime.Now}, !");
}
}
protected override void OnStop()
{
using (FileStream stream = new FileStream(filePath, FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine($"{DateTime.Now}, !");
}
}
}
}
4.항목"MyWindowsService"를 더 블 클릭 하여"MyService"디자인 인터페이스 에 들 어가 서 빈 위치 에서 마우스 오른쪽 단 추 를 눌 러 컨 텍스트 메뉴 를 팝 업 하고"설치 프로그램 추가"를 선택 하 십시오.아래 그림 과 같 습 니 다.5.이때 소프트웨어 는 두 개의 구성 요 소 를 생 성 합 니 다.각각'serviceInstaller 1'과'serviceProcessInstaller 1'입 니 다.다음 그림 과 같 습 니 다.
6."serviceInstaller 1"을 클릭 하고"속성"창 에서 ServiceName 을 MyService 로 변경 합 니 다.Description 은 제 서비스 로 변경 하고 Start Type 은 Manual 로 유지 합 니 다.아래 그림 과 같 습 니 다.
7."serviceProcessInstaller 1"을 클릭 하고"속성"창 에서 Account 를 LocalSystem(서비스 속성 시스템 등급)으로 변경 합 니 다.아래 그림 과 같 습 니 다.
8.마우스 우 클릭 으로 항목"MyWindowsService"를 클릭 하고 팝 업 된 컨 텍스트 메뉴 에서"생 성"단 추 를 선택 하 십시오.아래 그림 과 같 습 니 다.
9.이로써 윈도 서비스 가 생 성 되 었 습 니 다.
3.설치,시작,정지,마 운 트 해제 서 비 스 를 만 드 는 Windows 창
1.같은 솔 루 션 에 윈도 폼 프로젝트 를 새로 만 들 고 윈도 서비스 클 라 이언 트 라 고 명명 합 니 다.아래 그림 과 같 습 니 다.
2.이 항목 을 시작 항목 으로 설정 하고 창 에 네 개의 단 추 를 추가 합 니 다.각각 설치 서비스,시작 서비스,서비스 정지 및 마 운 트 해제 서비스 입 니 다.아래 그림 과 같 습 니 다.
3.F7 을 누 르 고 코드 편집 인터페이스 에 들 어가 서"System.Service Process"와"System.configuration.Install"을 참조 하고 다음 코드 를 입력 하 십시오.
using System;
using System.Collections;
using System.Windows.Forms;
using System.ServiceProcess;
using System.Configuration.Install;
namespace WindowsServiceClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string serviceFilePath = $"{Application.StartupPath}\\MyWindowsService.exe";
string serviceName = "MyService";
// :
private void button1_Click(object sender, EventArgs e)
{
if (this.IsServiceExisted(serviceName)) this.UninstallService(serviceName);
this.InstallService(serviceFilePath);
}
// :
private void button2_Click(object sender, EventArgs e)
{
if (this.IsServiceExisted(serviceName)) this.ServiceStart(serviceName);
}
// :
private void button4_Click(object sender, EventArgs e)
{
if (this.IsServiceExisted(serviceName)) this.ServiceStop(serviceName);
}
// :
private void button3_Click(object sender, EventArgs e)
{
if (this.IsServiceExisted(serviceName))
{
this.ServiceStop(serviceName);
this.UninstallService(serviceFilePath);
}
}
//
private bool IsServiceExisted(string serviceName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController sc in services)
{
if (sc.ServiceName.ToLower() == serviceName.ToLower())
{
return true;
}
}
return false;
}
//
private void InstallService(string serviceFilePath)
{
using (AssemblyInstaller installer = new AssemblyInstaller())
{
installer.UseNewContext = true;
installer.Path = serviceFilePath;
IDictionary savedState = new Hashtable();
installer.Install(savedState);
installer.Commit(savedState);
}
}
//
private void UninstallService(string serviceFilePath)
{
using (AssemblyInstaller installer = new AssemblyInstaller())
{
installer.UseNewContext = true;
installer.Path = serviceFilePath;
installer.Uninstall(null);
}
}
//
private void ServiceStart(string serviceName)
{
using (ServiceController control = new ServiceController(serviceName))
{
if (control.Status == ServiceControllerStatus.Stopped)
{
control.Start();
}
}
}
//
private void ServiceStop(string serviceName)
{
using (ServiceController control = new ServiceController(serviceName))
{
if (control.Status == ServiceControllerStatus.Running)
{
control.Stop();
}
}
}
}
}
4.후속 디 버 깅 서비스 와 마 운 트 해제 서 비 스 를 설치 하기 위해 생 성 된 MyWindowsService.exe 를 이 Windows 창 에 참조 합 니 다.아래 그림 과 같 습 니 다.5.서 비 스 를 설치 해 야 하기 때문에 UAC 의 Administrator 권한 을 사용 해 야 합 니 다.항목 인'윈도 서비스 클 라 이언 트'를 마우스 우 클릭 하고 팝 업 된 컨 텍스트 메뉴 에서'추가'->'새 항목'을 선택 하 십시오.팝 업 선택 창 에서'응용 프로그램 목록 파일'을 선택 하고 확인 을 누 르 십시오.아래 그림 과 같 습 니 다.
6.이 파일 을 열 고
7.IDE 가 시작 되면 다음 과 같은 창 이 나타 납 니 다.(UAC 설정 으로 인해 표시 되 지 않 을 수도 있 음)관리자 권한 으로 열 어야 합 니 다.
8.다시 열 면 IDE 에서 윈도 서비스 클 라 이언 트 프로젝트 를 실행 합 니 다.
9.WIN+R 방식 으로 실행 창 을 열 고 창 에 services.msc 를 입력 한 후 서 비 스 를 엽 니 다.아래 그림 과 같 습 니 다.
10.창 안의'설치 서비스'단 추 를 누 르 면 서비스 에 MyService 가 나타 납 니 다.아래 그림 과 같 습 니 다.
11.'서비스 실행'단 추 를 누 르 면 서 비 스 를 시작 하고 실행 합 니 다.다음 과 같 습 니 다.
12."서비스 정지"단 추 를 누 르 면 다음 그림 과 같이 서 비 스 를 중단 합 니 다.
13.'서비스 마 운 트 해제'단 추 를 누 르 면 서비스 에서 MyService 서 비 스 를 삭제 합 니 다.
14.상기 시작 및 정지 서 비 스 는 D:\MyServiceLog.txt 에 기 록 됩 니 다.내용 은 다음 과 같 습 니 다.
소스 코드 다운로드:MyWindowsService_jb51.rar
서비스 디 버 깅 방법
1.서 비 스 를 디 버 깅 하려 면 간단 합 니 다.디 버 깅 이 필요 한 프로젝트 에 서 비 스 를 추가 하면 됩 니 다.방금 만 든 서 비 스 를 디 버 깅 하려 면 현재 OnStop 이벤트 에 정지점 을 설정 합 니 다.다음 과 같 습 니 다.
2."WindowsServiceClient"프로젝트 를 시작 합 니 다."디버그"메뉴 에서"프로 세 스 에 첨부 파일"을 선택 하 십시오.(서 비 스 는 미리 설치 해 야 합 니 다)다음 과 같 습 니 다.
3."MyWindowsService.exe"를 찾 고"추가"단 추 를 누 르 십시오.아래 그림 과 같 습 니 다.
4."서비스 정지"단 추 를 누 르 면 프로그램 이 정지점 을 설정 한 곳 에서 중 단 됩 니 다.아래 그림 과 같 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.