[windows] 실행 파일에서 Windows 서비스 생성

실행 파일이 주어지면 시작할 때 시작하는 Windows 서비스를 만드는 빠른 방법이 있습니까?



답변

실행 파일에서 Windows 서비스를 만들려면 다음을 사용하십시오 sc.exe.

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

실제 exe경로 는 따옴표로 묶어야 하며 뒤에 공백이 있어야합니다 binPath=.

sc명령 에 대한 자세한 내용 은 Microsoft KB251192에서 찾을 수 있습니다 .

실행 파일에 대해서만 작동하지 않습니다. 실행 파일은 Windows 서비스 여야합니다 ( 예 : ServiceMain 구현 ). 비 서비스 실행 파일을 서비스로 등록하면 서비스를 시작하려고 할 때 다음 오류가 발생합니다.

오류 1053 : 서비스가 시작 또는 제어 요청에 적시에 응답하지 않았습니다.

서비스가 아닌 임의의 실행 파일로 Windows 서비스를 만들 수있는 도구가 있습니다. 이러한 도구의 예는 다른 대답을 참조하십시오.


답변

NSSM ( non- Sucking Service Manager )을 사용하여 .BAT 또는 .EXE 파일을 서비스로 실행하십시오.

http://nssm.cc/

  • 1 단계 : NSSM 다운로드
  • 2 단계 :nssm.exe install [serviceName]
  • 3 단계 : 실행 파일을 찾는 데 사용할 GUI가 열립니다.

답변

(케빈 통) 답변 연장.

1 단계 : nssm-2.24.zip 다운로드 및 압축 해제

2 단계 : 명령 행 유형에서 :

C:\> nssm.exe install [servicename]

아래와 같이 GUI (예 : UT2003 서버)를 연 다음 간단히 찾아보십시오 : yourapplication.exe

여기에 이미지 설명을 입력하십시오

https://nssm.cc/usage 에 대한 자세한 정보


답변

기존의 많은 답변에는 설치시 사람의 개입이 포함됩니다. 오류가 발생하기 쉬운 프로세스 일 수 있습니다. 많은 실행 파일을 서비스로 설치하려는 경우 마지막으로 할 일은 설치시 수동으로 수행하는 것입니다.

위에서 설명한 시나리오 를 위해 실행 파일을 서비스로 설치하는 명령 줄 도구 인 serman을 만들었습니다 . 쓰기 (및 한 번만 쓰기)는 실행 파일과 함께 간단한 서비스 구성 파일입니다. 운영

serman install <path_to_config_file>

서비스를 설치합니다. stdout그리고 stderr모두 기록됩니다. 자세한 내용은 프로젝트 웹 사이트를 참조하십시오 .

작동하는 구성 파일은 아래와 같이 매우 간단합니다. 그러나 그것은 또한 많은 유용한 기능을 가지고 <env><persistent_env>아래를.

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!--
       {{dir}} will be expanded to the containing directory of your
       config file, which is normally where your executable locates
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable
       available to your application, but not visible outside
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable to the system.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>


답변

이 추가 기능은 유용합니다. 관리자 로 실행해야합니다.

sc create  <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

서비스 이름에 공백이 있으면 “따옴표”로 묶으십시오.


답변

나는 그것을 위해 좋은 제품을 테스트했다 : AlwaysUp . 무료는 아니지만 시험 기간이 30 일이므로 시험해 볼 수 있습니다.


답변