답변:
실행 파일에서 Windows 서비스를 만들려면 다음을 사용하십시오 sc.exe
.
sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"
실제 exe
경로 는 따옴표로 묶어야 하며 뒤에 공백이 있어야합니다 binPath=
.
이 sc
명령 에 대한 자세한 내용 은 Microsoft KB251192에서 찾을 수 있습니다 .
실행 파일에 대해서만 작동하지 않습니다. 실행 파일은 Windows 서비스 여야합니다 ( 예 : ServiceMain 구현 ). 비 서비스 실행 파일을 서비스로 등록하면 서비스를 시작하려고 할 때 다음 오류가 발생합니다.
오류 1053 : 서비스가 시작 또는 제어 요청에 적시에 응답하지 않았습니다.
서비스가 아닌 임의의 실행 파일로 Windows 서비스를 만들 수있는 도구가 있습니다. 이러한 도구의 예는 다른 대답을 참조하십시오.
binpath=
실행 창을 큰 따옴표로 둘러싼 후의 공백 은 적어도 창 10에서는 완전히 잘못되었습니다. 경로에 공백과 같은 특수 문자가 포함 된 경우에만 인용이 필요합니다. 또한 대소 문자 구분 (소문자 / 대문자 / 대소 문자 혼합)은 변수 이름의 어느 곳에서도 중요하지 않으며 displayname="my service"
명령 줄을 전달하는 동안 서비스를 만드는 동안 첫 번째 행 ( Name
) 으로 표시하는 또 다른 장점 services.msc
입니다.
binPath=
은 Windows 7에서는 필요했지만 Windows 10에서는 필요하지 않았습니다
NSSM ( non- Sucking Service Manager )을 사용하여 .BAT 또는 .EXE 파일을 서비스로 실행하십시오.
nssm.exe install [serviceName]
(케빈 통) 답변 연장.
1 단계 : nssm-2.24.zip 다운로드 및 압축 해제
2 단계 : 명령 행 유형에서 :
C:\> nssm.exe install [servicename]
아래와 같이 GUI (예 : UT2003 서버)를 연 다음 간단히 찾아보십시오 : yourapplication.exe
https://nssm.cc/usage 에 대한 자세한 정보
nssm.exe install [serviceName]
. 이 솔루션은 작동하지만 GUI 응용 프로그램이 있으면 Win Serever2003에서 작동하지 않습니다. 나중에 제거하려면nssm.exe remove [youservicename]
nginx
는 필요하지 않으며 오도의 소지가 있습니다. 이 명령은 명령 없이도 작동합니다. 명령 프롬프트에서 서비스 이름을 제공하려는 경우 선택적 매개 변수입니다.
기존의 많은 답변에는 설치시 사람의 개입이 포함됩니다. 오류가 발생하기 쉬운 프로세스 일 수 있습니다. 많은 실행 파일을 서비스로 설치하려는 경우 마지막으로 할 일은 설치시 수동으로 수행하는 것입니다.
위에서 설명한 시나리오 를 위해 실행 파일을 서비스로 설치하는 명령 줄 도구 인 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>
서비스 이름에 공백이 있으면 "따옴표"로 묶으십시오.
sc create <service_name> binpath= <binary_path>