[C#] 서비스 프로그램 – 1

1. 서비스 만들기
서비스를 만들고 구성하려면
MyNewService1
C-Interactive-Service-만들기-서비스와-데스크탑-상호작용-허용-_-네이버-블로그
1. Visual Studio의 메뉴 모음에서 파일, 새로 만들기, 프로젝트를 선택합니다.
새 프로젝트 대화 상자가 열립니다.
2. Visual C# 프로젝트 템플릿 목록에서 Windows 서비스를 선택하고 프로젝트의 이름을 MyNewService로 지정합니다. 확인을 선택합니다.
프로젝트 템플릿은 System.ServiceProcess.ServiceBase에서 상속된 Service1이라는 구성 요소 클래스를 자동으로 추가합니다.
3. 편집 메뉴에서 찾기 및 바꾸기, 파일에서 찾기를 선택합니다(키보드: Ctrl+Shift+F).  모든 Service1을 MyNewService로 변경합니다. Service1.cs, Program.cs 및 Service1.Designer.cs  파일에서 인스턴스를 찾습니다.
4. Service1.cs [디자인] 의 속성 창에서 Service1의 ServiceName 및 (이름) 속성이 아직 설정되어 있지 않으면 MyNewService로 설정합니다.
5. 솔루션 탐색기에서 Service1.cs의 이름을 MyNewService.cs로 바꿉니다.
2. 서비스에 기능 추가
사용자 지정 이벤트 로그 기능을 서비스에 추가하려면
1. 솔루션 탐색기에서 MyNewService.cs 뷰 디자이너를 선택합니다.
2. 도구 상자의 구성 요소 섹션에서 EventLog 구성 요소를 디자이너로 끌어 옵니다.
3. 솔루션 탐색기에서 MyNewService.cs 메뉴를 열고 코드 보기를 선택합니다.
4. MyNewService 클래스에서 components 변수를 선언하는 줄 바로 다음에 eventLog 개체에 대한 선언을 추가합니다.

1
this.AutoLog = false;

5. 사용자 지정 이벤트 로그를 정의하는 생성자를 추가하거나 편집합니다.

1
2
3
4
5
6
7
8
9
10
11
public MyNewService()
{
    InitializeComponent();
    if (!System.Diagnostics.EventLog.SourceExists("MySource"))
    {        
            System.Diagnostics.EventLog.CreateEventSource(
                "MySource","MyNewLog");
    }
    eventLog1.Source = "MySource";
    eventLog1.Log = "MyNewLog";
}

서비스가 시작될 때 수행되는 동작을 정의하려면
• 코드 편집기에서 프로젝트를 만들 때 자동으로 재정의된 OnStart 메서드를 찾아서 코드를 다음과 같이 바꿉니다.  이렇게 하면 서비스 실행이 시작될 때 이벤트 로그에 항목이 추가됩니다.

1
2
3
4
protected override void OnStart(string[] args)
{
    eventLog1.WriteEntry("In OnStart");
}

서비스 응용 프로그램은 오랫동안 실행되도록 설계되므로 대개 시스템의 특정 항목을 폴링하거나 모니터링합니다.  모니터링은 OnStart 메서드에서 설정됩니다. 그러나 OnStart가 실제로 모니터링을 수행하지는 않습니다. 서비스의 작업이 시작되고 나면 OnStart 메서드가 운영 체제에 반환되어야 하며 무제한 순환하거나 방해가 되어서는 안 됩니다. 간단한 폴링 메커니즘을 설정하려면 System.Timers.Timer 구성 요소를 사용할 수 있습니다. 타이머는 코드에서 주기적으로 이벤트를 발생시키며 그러는 동안에도 서비스에서는 모니터링을 수행할 수 있습니다. 이렇게 하려면 다음 코드를 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
protected override void OnStart(string[] args)
{
    eventLog1.WriteEntry("In OnStart");
    // Set up a timer to trigger every minute.
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Interval = 60000; // 60 seconds
    timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
    timer.Start();
}

타이머 이벤트를 처리하는 코드를 추가합니다.

1
2
3
4
5
public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
    // TODO: Insert monitoring activities here.
    eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, 210001);
}

주 스레드에서 모든 작업을 실행하는 대신 백그라운드 작업자 스레드를 사용하여 작업을 수행할수도 있습니다.

3. 서비스에 설치 관리자 추가
서비스를 위한 설치 관리자를 만들려면
1. 솔루션 탐색기에서 MyNewService.cs 의 메뉴를 열고 뷰 디자이너를 선택합니다.
2. 디자이너의 배경을 클릭하여 서비스 내용이 아닌 서비스 자체를 선택합니다.
3. 디자이너 창의 상황에 맞는 메뉴를 열고(포인팅 장치를 사용하는 경우 창 안쪽을 마우스 오른쪽 단추로 클릭) 설치 관리자 추가를 선택합니다.

기본적으로 설치 관리자가 두 개 들어 있는 구성 요소 클래스가 프로젝트에 추가됩니다.  구성 요소의 이름이 ProjectInstaller로 지정되며 구성 요소에는 서비스를 위한 설치 관리자와 서비스 관련 프로세스를 위한 설치 관리자가 들어 있습니다.
4. ProjectInstaller의 디자인 뷰에서 Visual C# 프로젝트의 경우 serviceInstaller1을 선택합니다.
5. 속성 창에서 ServiceName 속성이 행복서비스로 설정되어 있는지 확인합니다.
6. 설명 속성을 “샘플 서비스”와 같은 텍스트로 설정합니다.  이 텍스트는 서비스 창에 표시되며 사용자가 서비스를 식별하고 서비스의 용도를 이해하는 데 도움이 됩니다.
7. DisplayName  속성을 서비스 창의 이름 열에 표시할 텍스트로 설정합니다.  예를 들어 “행복서비스 표시 이름“을 입력할 수 있습니다. 이 이름은 net start 명령을 사용하여 서비스를 시작하는 등의 경우 시스템에서 사용하는 이름인 ServiceName 속성과는 다릅니다.
8. StartType  속성을 Automatic으로 설정합니다.

9. 디자이너에서 Visual C# 프로젝트의 경우 serviceProcessInstaller1을 선택합니다.  Account  속성을 LocalSystem으로 설정합니다. 이렇게 하면 서비스가 로컬 서비스 계정으로 설치되고 실행됩니다.

4. 시작 매개 변수 설정
다른 실행 파일과 마찬가지로 Windows 서비스에도 명령줄 인수나 시작 매개 변수를 사용할 수 있습니다.  프로세스 시작 매개 변수에 코드를 추가하면 사용자가 Windows 제어판의 서비스 창을 사용하여 고유한 사용자 지정 시작 매개 변수로 서비스를 시작할 수 있습니다. 그러나 이러한 시작 매개 변수는 다음 번에 서비스를 시작할 때 유지되지 않습니다. 시작 매개 변수를 영구적으로 설정하려는 경우 아래 절차에 나와 있는 것처럼 레지스트리에서 설정하면 됩니다.

일반적으로 서비스에 많은 시작 매개 변수가 필요한 경우에는 레지스트리나 구성 파일을 대신 사용하는 것이 좋습니다.
모든 Windows 서비스에는 레지스트리의 HKLM\System\CurrentControlSet\services 아래에 항목이 있습니다. 이 서비스의 키 아래에서 매개 변수 하위 키를 사용하여 서비스가 액세스할 수 있는 정보를 저장할 수 있습니다. Windows 서비스의 응용 프로그램 구성 파일은 다른 프로그램 형식에서와 같은 방식으로 사용할 수 있습니다. 예제 코드를 보려면 AppSettings를 참조하세요.

1. Program.cs 의 Main 메서드에서 명령줄에 대해 인수를 추가합니다.

1
2
3
4
5
6
7
8
9
static void Main(string[] args)
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new MyNewService1(args)
    };
    ServiceBase.Run(ServicesToRun);
}

2. MyNewService 생성자를 다음과 같이 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public MyNewService1(string[] args)
{           
    InitializeComponent();
    string eventSourceName = "MySource";
    string logName = "MyNewLog";
    if (args.Count() > 0)
    {
        eventSourceName = args[0];
    }
    if (args.Count() > 1)
    {
        logName = args[1];
    }
    eventLog1 = new System.Diagnostics.EventLog();
    if (!System.Diagnostics.EventLog.SourceExists(eventSourceName))
    {
        System.Diagnostics.EventLog.CreateEventSource(eventSourceName, logName);
    }
    eventLog1.Source = eventSourceName;
    eventLog1.Log = logName;
}

이 코드는 제공된 시작 매개 변수에 따라 이벤트 소스 및 로그 이름을 설정하거나, 인수를 제공하지 않는 경우에는 기본값을 사용합니다.
3. 명령줄 인수를 지정하려면 ProjectInstaller.cs 의 ProjectInstaller 클래스에 다음 코드를 추가합니다.

1
2
3
4
5
6
protected override void OnBeforeInstall(IDictionary savedState)
{
    string parameter = "MySource1\" \"MyLogFile1";
    Context.Parameters["assemblypath"] = "\"" + Context.Parameters["assemblypath"] + "\" \"" + parameter + "\"";
    base.OnBeforeInstall(savedState);
}

이 코드는 기본 매개 변수 값을 추가하여 일반적으로 Windows 서비스 실행 파일의 전체 경로를 포함하는 ImagePath 레지스트리 키를 수정합니다. 경로와 개별 매개 변수는 따옴표로 묶어야 서비스가 올바르게 시작됩니다. 이 Windows 서비스의 시작 매개 변수를 변경하려는 경우 사용자는 ImagePath 레지스트리 키에 지정된 매개 변수를 변경할 수 있습니다. 그러나 해당 키를 프로그래밍 방식으로 변경하고 사용자 친화적인 방식(예: 관리 또는 구성 유틸리티)으로 기능을 노출하는 것이 보다 효율적입니다.

5. 서비스 빌드
서비스 프로젝트를 빌드하려면
1. 솔루션 탐색기에서 프로젝트의 상황에 맞는 메뉴를 열고 속성을 선택합니다.  프로젝트의 속성 페이지가 나타납니다.
2. 응용 프로그램 탭의 시작 개체 목록에서 MyNewService.Program을 선택합니다.
3. 솔루션 탐색기에서 프로젝트의 상황에 맞는 메뉴를 열고 빌드를 선택하여 프로젝트를 빌드합니다(키보드: Ctrl+Shift+B).
6. 서비스 설치
Windows 서비스를 설치하려면
1. Windows 7 및 Windows Server에서는 시작 메뉴의 Visual Studio Tools에서 개발자 명령 프롬프트를 엽니다.  Windows 8 또는 Windows 8.1에서는 시작 화면의 Visual Studio Tools 타일을 선택한 다음 관리 자격 증명을 사용하여 개발자 명령 프롬프트를 실행합니다. 마우스를 사용하는 경우 개발자 명령 프롬프트를 마우스 오른쪽 단추로 클릭한 후 관리자 권한으로 실행을 선택합니다.
2. 명령 프롬프트 창에서 프로젝트의 출력이 포함된 폴더로 이동합니다.  예를 들어, 내 문서 폴더에서 D:\win_project\winformapp2\MyNewService1\bin\Debug로 이동합니다.
3. 다음 명령을 입력합니다.

installutil.exe MyNewService1.exe

7. 서비스 시작 및 실행
서비스를 시작하고 중지하려면
1. Windows에서 시작 화면 또는 시작 메뉴를 열고 services.msc를 입력합니다.
이제 서비스 창의 목록에 행복서비스 이름 표시 가 표시됩니다.

2. 서비스 창에서 서비스의 바로 가기 메뉴를 열고 시작을 선택합니다.
3. 서비스의 바로 가기 메뉴를 열고 중지를 선택합니다.
4. (선택 사항) 명령줄에서 net start 행복서비스 및 net stop 행복서비스 명령을 사용하여 서비스를 시작하고 중지할 수 있습니다.

서비스의 이벤트 로그 출력을 확인하려면
1. 명령 프롬프트 창에서 eventvwr.msc 를 입력합니다.
2. MyNewLog(선택적 절차를 사용하여 명령줄 인수를 추가한 경우에는 MyLogFile1)의 목록을 찾아서 확장합니다.  서비스에서 수행한 두 작업(시작 및 중지)의 항목을 확인할 수 있습니다.
8. Windows 서비스 제거
서비스를 제거하려면
1. 관리 자격 증명을 사용하여 개발자 명령 프롬프트를 엽니다.
2. 명령 프롬프트 창에서 프로젝트의 출력이 포함된 폴더로 이동합니다.  예를 들어, 내 문서 폴더에서 D:\win_project\winformapp2\MyNewService1\bin\Debug로 이동합니다.
3. 다음 명령을 입력합니다.

installutil.exe /u MyNewService.exe

출처: http://it-jerryfamily.tistory.com/entry/C-서비스-프로그램-1 [IT 이야기]MyNewService1

“[C#] 서비스 프로그램 – 1”의 36개의 댓글

  1. Greetings! Quick question that’s totally off topic.
    Do you know how to make your site mobile friendly? My site looks weird when browsing from my iphone 4.
    I’m trying to find a theme or plugin that might be able to resolve this problem.
    If you have any recommendations, please share. Thanks!

  2. Cbd oil that works 2020
    Hi there! This is kind of off topic but I need some advice
    from an established blog. Is it very difficult to set up your
    own blog? I’m not very techincal but I can figure
    things out pretty fast. I’m thinking about setting up
    my own but I’m not sure where to begin. Do you have any ideas or suggestions?
    Many thanks best cbd oil for pain http://bit.ly/3drY6lE cbd oil that works
    2020 http://bit.ly/3drY6lE

  3. obviously like your web site but you have to take a look
    at the spelling on several of your posts. A number of them are rife
    with spelling problems and I to find it very troublesome
    to inform the reality on the other hand I’ll definitely come again again.

  4. I would like to thank you for the efforts you’ve
    put in penning this blog. I’m hoping to check
    out the same high-grade blog posts from you in the future as well.
    In truth, your creative writing abilities has motivated me to get
    my own, personal website now 😉

  5. I just want to tell you that I am all new to weblog and definitely loved you’re web-site. More than likely I’m planning to bookmark your blog post . You surely have perfect article content. With thanks for sharing your web-site.

  6. I?m pleased, I must claim. Truly hardly ever do I run into a blog that?s both instructional and also enjoyable, and let me inform you, you have actually hit the nail on the head. Your concept is outstanding; the concern is something that inadequate individuals are speaking wisely about. I am very pleased that I came across this in my search for something relating to this.

  7. Hey, you used to write wonderful, but the last few posts have been kinda boring… I miss your tremendous writings. Past few posts are just a little out of track! come on!

  8. First of all I would like to say excellent blog! I had a quick question in which I’d like to ask if you don’t mind. I was interested to find out how you center yourself and clear your head before writing. I’ve had a tough time clearing my thoughts in getting my ideas out there. I truly do take pleasure in writing but it just seems like the first 10 to 15 minutes are wasted just trying to figure out how to begin. Any ideas or tips? Appreciate it!

  9. Nice post. I learn some thing tougher on distinct blogs everyday. Most commonly it is stimulating to learn to read content from other writers and exercise a specific thing there. I’d would rather use some together with the content in my weblog no matter whether you don’t mind. Natually I’ll provide you with a link in your web weblog. Many thanks for sharing.

  10. An outstanding share, I simply given this onto an associate that was doing a little evaluation on this. As well as he in fact acquired me breakfast because I found it for him. smile. So let me rephrase that: Thnx for the treat! But yeah Thnkx for spending the moment to review this, I really feel strongly regarding it and enjoy learning more on this subject. Preferably, as you end up being competence, would certainly you mind upgrading your blog with even more information? It is highly valuable for me. Huge thumb up for this blog post!

  11. When I initially commented I clicked the -Inform me when brand-new comments are added- checkbox as well as currently each time a comment is added I obtain four emails with the very same comment. Is there any way you can remove me from that service? Many thanks!

  12. There are definitely a great deal of details like that to consider. That is a fantastic point to bring up. I offer the thoughts over as basic inspiration but plainly there are questions like the one you raise where the most crucial thing will be operating in sincere good faith. I don?t understand if finest techniques have arised around points like that, but I make sure that your job is plainly recognized as an up for grabs. Both children as well as ladies really feel the impact of simply a moment?s satisfaction, for the remainder of their lives.

  13. I was really pleased to find this web-site. I wished to thanks for your time for this terrific read!! I certainly enjoying every little bit of it and I have you bookmarked to check out new stuff you article.

  14. After study a few of the blog posts on your web site currently, and also I genuinely like your way of blogging. I bookmarked it to my book marking internet site list and will be checking back soon. Pls take a look at my internet site as well and also let me recognize what you assume.

  15. I was very happy to discover this web-site. I wanted to many thanks for your time for this remarkable read!! I absolutely appreciating every little bit of it as well as I have you bookmarked to take a look at new things you blog post.

  16. I?m impressed, I have to state. Actually hardly ever do I encounter a blog that?s both enlightening as well as entertaining, and also let me inform you, you have actually hit the nail on the head. Your concept is exceptional; the problem is something that inadequate people are speaking wisely around. I am really delighted that I came across this in my search for something relating to this.

  17. An excellent share, I simply provided this onto an associate that was doing a little evaluation on this. As well as he as a matter of fact acquired me morning meal since I discovered it for him. smile. So let me reword that: Thnx for the reward! Yet yeah Thnkx for spending the moment to review this, I feel highly regarding it and love reading more on this topic. When possible, as you come to be experience, would certainly you mind updating your blog site with more information? It is very handy for me. Huge thumb up for this post!

  18. It is perfect time to make some plans for the future and it
    is time to be happy. I have read this post and if I could I want to suggest you
    few interesting things or advice. Maybe you could write next articles referring
    to this article. I want to read more things about it!

  19. I discovered your blog site on google and check a few of your early articles. Remain to maintain the excellent operate. I simply extra up your RSS feed to my MSN Information Reader. Looking for ahead to reading more from you in the future!?

  20. This is the best blog site for any individual that wishes to learn about this subject. You realize so much its almost difficult to say with you (not that I actually would want?HaHa). You absolutely placed a brand-new spin on a topic thats been written about for many years. Terrific things, just wonderful!

  21. Great message. I learn something extra challenging on different blog sites everyday. It will certainly always be promoting to review content from other writers and exercise a something from their shop. I?d favor to make use of some with the content on my blog site whether you don?t mind. Natually I?ll give you a link on your internet blog site. Thanks for sharing.

댓글 남기기