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});

}

+ Recent posts