첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

■ Process 클래스 : 윈도우즈 서비스 실행하기

------------------------------------------------------------------------------------------------------------------------

TestProject.zip


WindowsServiceHelper.cs

 

 

using System.Diagnostics;

 

namespace TestProject

{

    /// <summary>

    /// 윈도우즈 서비스 헬퍼

    /// </summary>

    public static class WindowsServiceHelper

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 윈도우즈 서비스 생성하기 - CreateWindowsService(serviceName, argumentList)

 

        /// <summary>

        /// 윈도우즈 서비스 생성하기

        /// </summary>

        /// <param name="serviceName">서비스명</param>

        /// <param name="argumentList">인자 리스트</param>

        /// <returns>처리 결과</returns>

        public static int CreateWindowsService(string serviceName, string argumentList)

        {

            Process process = GetProcess("sc.exe", $"create {serviceName} binPath= \"{argumentList}\"");

 

            process.Start();

 

            process.WaitForExit();

 

            return process.ExitCode;

        }

 

        #endregion

        #region 윈도우즈 서비스 시작하기 - StartWindowsService(serviceName)

 

        /// <summary>

        /// 윈도우즈 서비스 시작하기

        /// </summary>

        /// <param name="serviceName">서비스명</param>

        /// <returns>처리 결과</returns>

        public static int StartWindowsService(string serviceName)

        {

            Process process = GetProcess("sc.exe", $"start {serviceName}");

 

            process.Start();

 

            process.WaitForExit();

 

            return process.ExitCode;

        }

 

        #endregion

        #region 윈도우즈 서비스 중단하기 - StopWindowsService(serviceName)

 

        /// <summary>

        /// 윈도우즈 서비스 중단하기

        /// </summary>

        /// <param name="serviceName">서비스명</param>

        /// <returns>처리 결과</returns>

        public static int StopWindowsService(string serviceName)

        {

            Process process = GetProcess("sc.exe", $"stop {serviceName}");

 

            process.Start();

 

            process.WaitForExit();

 

            return process.ExitCode;

        }

 

        #endregion

        #region 윈도우즈 서비스 제거하기 - DeleteWindowsService(serviceName)

 

        /// <summary>

        /// 윈도우즈 서비스 제거하기

        /// </summary>

        /// <param name="serviceName">서비스명</param>

        /// <returns>처리 결과</returns>

        public static int DeleteWindowsService(string serviceName)

        {

            Process process = GetProcess("sc.exe", $"delete {serviceName}");

 

            process.Start();

 

            process.WaitForExit();

 

            return process.ExitCode;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로세스 구하기 - GetProcess(filePath, argumentList)

 

        /// <summary>

        /// 프로세스 구하기

        /// </summary>

        /// <param name="filePath">파일 경로</param>

        /// <param name="argumentList">인자 리스트</param>

        /// <returns>프로세스</returns>

        private static Process GetProcess(string filePath, string argumentList)

        {

            Process process = new Process();

 

            process.StartInfo.UseShellExecute = true;

            process.StartInfo.FileName        = filePath;

            process.StartInfo.WindowStyle     = ProcessWindowStyle.Hidden;

            process.StartInfo.Verb            = "runas";

            process.StartInfo.Arguments       = argumentList;

 

            return process;

        }

 

        #endregion

    }

}

 

 

Program.cs

 

 

using System;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        private static void Main(string[] argumentArray)

        {

            string serviceName  = "nats01";

            string argumentList = @"d:\nats\bin\gnatsd.exe --config d:\nats\config\server.conf";

 

            int exitCode;

            

            exitCode = WindowsServiceHelper.CreateWindowsService(serviceName, argumentList);

            

            if(exitCode != 0)

            {

                Console.WriteLine("윈도우즈 서비스 생성을 실패했습니다 : {0}", exitCode);

            

                return;

            }

            

            exitCode = WindowsServiceHelper.StartWindowsService(serviceName);

            

            if(exitCode != 0)

            {

                Console.WriteLine("윈도우즈 서비스 시작을 실패했습니다 : {0}", exitCode);

            

                return;

            }

 

            exitCode = WindowsServiceHelper.StopWindowsService(serviceName);

 

            if(exitCode != 0)

            {

                Console.WriteLine("윈도우즈 서비스 중단을 실패했습니다 : {0}", exitCode);

 

                return;

            }

 

            exitCode = WindowsServiceHelper.DeleteWindowsService(serviceName);

 

            if(exitCode != 0)

            {

                Console.WriteLine("윈도우즈 서비스 삭제를 실패했습니다 : {0}", exitCode);

 

                return;

            }

 

            Console.WriteLine("작업을 성공적으로 처리했습니다.");

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

728x90
반응형
Posted by 사용자 icodebroker

댓글을 달아 주세요