1. Program.cs에서 프로세스의 진입점을 분기한다.
internal static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
static void Main(string[] args)
{
if (Environment.UserInteractive)
{
Console.WriteLine("콘솔");
Service1 service1 = new Service1();
service1.TestStartupAndStop(args);
}
else
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
}
2. Service1.cs (이름 다를 수 있음)에 디버깅용 함수를 추가한다.
internal void TestStartupAndStop(string[] args)
{
Console.WriteLine($"Service starting...");
this.OnStart(args);
Console.WriteLine($"Service started. Press any key to stop.");
Console.ReadKey();
Console.WriteLine($"Service stopping...");
this.OnStop();
Console.WriteLine($"Service stopped. Closing in 5 seconds.");
System.Threading.Thread.Sleep(5000);
}
3. 빌드 & 명령어로 서비스 생성
서비스 생성
1) cmd를 관리자 권한으로 실행
2) InstallUtil.exe가 위치한 경로로 이동 : cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
3) cmd에서 서비스 Install : InstallUtil.exe C:\\VisualStudio프로젝트경로\Service(서비스명).exe
4. 삭제
sc delete 서비스 명
추가로 서비스 명 설정 등 기본 프리셋은 ProjectInstaller.Designer.cs에서 아래와 같이 할 수있다.
private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
this.serviceProcessInstaller1.AfterInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_AfterInstall);
//
// serviceInstaller1
//
this.serviceInstaller1.Description = "CNC Collector Installer";
this.serviceInstaller1.DisplayName = "WinSvr.CNC.Collector";
this.serviceInstaller1.ServiceName = "CNCCollector";
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[] {
this.serviceProcessInstaller1,
this.serviceInstaller1});
}