기본 콘텐츠로 건너뛰기

라벨이 윈도우즈 서비스인 게시물 표시

[윈도우즈 서비스] 설치 파일 만들기(WIX) - #4

이제 윈도우즈 서비스를 다 만들었기 때문에 설치 파일을 만들어 보겠습니다. 저희 같은 경우에는 불특정 다수의 PC에 설치하는 것이 아니고 서버에만 설치하면 되기 때문에 파일을 서버에 복사한 뒤 [윈도우즈 서비스] Console 실행 - #1 에서 설명한 방식대로 서비스를 등록해도 됩니다. 하지만 설치 파일을 만들면 이러한 작업을 자동으로 해주기 때문에 번거로운 작업을 하지 않아도 됩니다. WIX를 이용하여 윈도우즈 서비스를 등록하는 방법을 알아보도록 하겠습니다. How To: Install a Windows service To install a Windows service, use the  ServiceInstall  element. Other configuration can be made using the  ServiceControl  element and the  ServiceConfig  element from WixUtilExtension. Step 1: Install the service The  ServiceInstall  element contains the basic information about the service to install. This element should be the child of a  Component  element whose key path is a sibling  File  element that specifies the service executable file. Tip:  to specify a system account, such as LocalService or NetworkService, use the prefix  NT AUTHORITY . For example, use  NT AUTHORITY\LocalService  as the...

[윈도우즈 서비스] Console 실행 - #1

윈도우즈 서비스에서 특정 작업을 수행할 경우, 작업이 한꺼번에 많이 몰릴 때를 대비하여 프로세스를 실행하여 작업을 처리하려고 합니다. (기존에는 서비스 내부에서 스레드(Thread)를 생성하여 처리했었는데 문제가 많이 발생했었습니다.) 이렇게 프로세스로 처리하면 작업 중에 오류가 발생하더라도 해당 프로세스만 종료되고 윈도우즈 서비스에는 아무런 영향도 미치지 않게 됩니다. 윈도우즈 서비스는 이 글 참조하여 생성하면 됩니다. 위 글에서도 나와있지만 관리자 권한으로 Command를 실행하여 서비스를 등록해야 합니다. 그렇지 않으면 아래와 같은 오류 메시지를 뿌리고 등록에 실패하게 됩니다. 서비스에 등록했으면 WIN 키( ) + R키를 눌러 services.msc 를 입력하여 윈도우즈 서비스 창을 엽니다. 하지만 서비스를 바로 실행하면 아마 아래와 같은 메시지가 뜨면서 서비스가 실행되지 않습니다. 서비스 화면에서 해당 서비스의 속성 창으로 들어가서 로그온 탭에서 계정을 로컬 시스템 계정으로 변경합니다.( '서비스와 데스크탑 상호 작용 허용' 을 체크해주세요.)  ->  다시 서비스를 실행하면 서비스가 제대로 실행됩니다. 서비스에서 실행할 Console 프로그램 서비스에서 Timer를 돌려 특정 시간마다 Console 프로그램을 실행하려고 합니다. 실행 중인 Console 프로그램의 Instance의 수를 얻어 Console 프로그램 실행 여부를 판단할 수 있습니다. string ProcessName = "ConsoleApp1"; // Get all instances of ConsoleApp1 running on the local computer. // This will return an empty array if ConsoleApp1 isn't running. Process[] ProcessByName = Process.GetProcessesByName(Proces...