source

실행 파일에서 Windows 서비스 생성

myloves 2023. 4. 8. 10:15

실행 파일에서 Windows 서비스 생성

실행 파일을 지정하면 Windows 서비스를 시작할 때 바로 실행할 수 있는 방법이 있습니까?

하려면 , 「」Windows 를 합니다.sc.exe:

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

실제 주위에 따옴표가 있어야 합니다.exe이 있습니다.binPath=.

커맨드의 상세한 것에 대하여는, Microsoft KB251192참조해 주세요.

모든 실행 파일에서는 동작하지 않습니다.실행 파일은 Windows 서비스(ServiceMain 구현)여야 합니다.서비스가 아닌 실행 파일을 서비스로 등록하면 서비스를 시작하려고 하면 다음 오류가 발생합니다.

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

임의의 비서비스 실행 파일로부터 Windows 서비스를 작성할 수 있는 툴이 있습니다.이 툴의 예에 대해서는, 그 외의 답변을 참조해 주세요.

를 실행하려면 NSSM(비흡입 Service Manager)을 사용합니다.BAT 또는 any.서비스로서의 EXE 파일

http://nssm.cc/

  • 순서 1: NSSM 다운로드
  • 순서 2: 서버 설치nssm.exe install [serviceName]
  • 스텝 3: 실행 파일을 찾기 위해 사용하는 GUI가 열립니다.

확장(Kevin Tong) 답변입니다.

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

2단계: 명령줄에서 다음 유형:

C:\> nssm.exe install [servicename]

다음과 같이 GUI를 열고(예: UT2003 서버), 어플리케이션으로 이동합니다.실행

여기에 이미지 설명 입력

자세한 것은, https://nssm.cc/usage 를 참조해 주세요.

이 엑스트라들은 유용한 것으로 판명되었다.관리자 권한으로 실행해야 함

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

서비스 이름에 공백이 있는 경우 "따옴표"로 묶으십시오.

많은 기존 답변에는 설치 시 사용자의 개입이 포함됩니다.이는 오류가 발생하기 쉬운 프로세스일 수 있습니다.서비스로 설치하는 실행 파일이 여러 개 있는 경우 설치 시 수동으로 설치하는 것이 가장 바람직하지 않습니다.

상기의 시나리오에 대해서, 서비스로서의 실행 파일을 인스톨 하는 커맨드 라인 툴, serman을 작성했습니다.쓰기(및 쓰기)는 실행 파일과 함께 간단한 서비스 컨피규레이션파일만 있으면 됩니다.달려.

serman install <path_to_config_file>

을 사용하다 stdout ★★★★★★★★★★★★★★★★★」stderr모두 로그에 기록됩니다.자세한 내용은 프로젝트 웹사이트를 참조하십시오.

작업 컨피규레이션파일은 다음과 같이 매우 간단합니다. 그것은 있다.<env> ★★★★★★★★★★★★★★★★★」<persistent_env>discloss.d.

<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>

Sergii Pozharov의 답변과 동일하지만 PowerShell cmdlet은 다음과 같습니다.

New-Service -Name "MyService" -BinaryPathName "C:\Path\to\myservice.exe"

커스터마이즈의 상세한 것에 대하여는, 을 참조해 주세요.

이는 Windows Services API를 이미 구현한 실행 파일에만 적용됩니다.

나는 그것을 위해 좋은 제품을 테스트했다.Always Up.무료는 아니지만 30일의 평가 기간이 있으니 시험 삼아 사용해 보세요.

Windows, Mac 및 Linux OS에서 시스템 서비스로 PHP 및 기타 스크립트 언어를 시작할 수 있도록 몇 년 전에 크로스 플랫폼 Service Manager 소프트웨어를 만들었습니다.

https://github.com/cubiclesoft/service-manager

Service Manager는 거의 동일한 명령줄 옵션을 사용하여 타깃 OS에 시스템 서비스를 설치하고 관리하는 사전 컴파일된 바이너리 세트입니다(소스 코드도 사용 가능).플랫폼마다 미묘한 차이가 있지만 핵심 기능은 대부분 정규화되어 있습니다.

하위 프로세스가 중지되면 Service Manager는 자동으로 프로세스를 재시작합니다.

Service Manager에서 시작하는 프로세스는 재시작 및 새로고침 요청을 처리하기 위해 2개의 알림 파일을 정기적으로 감시해야 하지만 반드시 그렇게 할 필요는 없습니다.Service Manager는 제어된 재시작/새로고침 요구에 적시에 응답하지 않을 경우 자 프로세스를 강제로 재시작합니다.

서비스 작성/편집/삭제 조작을 위한 작은 무료 유틸리티를 확인하실 수 있습니다.다음은 작성 예를 제시하겠습니다.

[서비스] -> [변경] -> [작성]으로 이동합니다.

여기에 이미지 설명 입력

실행 파일(Google 드라이브): [다운로드]

소스 코드: [다운로드]

블로그 투고: [BlogLink]

서비스 에디터 클래스:WinServiceUtils.cs

아마 당신의 답변이 모두 더 나을 것입니다.그러나, 단지 선택지를 완전하게 하기 위해서, 저는 몇년간에 걸쳐서 사용되고 있던, 낡은, 같은 방법을 상기시키고 싶었습니다.

SrvAny(InstSrv에 의해 설치됨)

https://learn.microsoft.com/en-us/troubleshoot/windows-client/deployment/create-user-defined-service 를 참조해 주세요.

상위 답변 중 일부는 NSSM을 가리키고 있습니다.이 프로젝트는 2017년 이후로 업데이트되지 않았습니다.

유사한 기능을 대체하는 보다 현대적인 방법은 https://github.com/winsw/winsw/입니다. 여기에는 여러 가지 예시와 좋은 문서가 포함되어 있습니다.

할 수 있는 : NSSM의 이름을 NSSM보다 빠르게 설정할 수 .winsw로서 실행 가능한.myapp.exeXML 컨피규레이션파일을 만듭니다.myapp.xml, 너는 그냥 뛰어.myapp.exe install그리고.myapp.exe start그리고 voila, 서비스가 실행 중입니다.

Topshelf라는 오픈 소스 라이브러리를 사용하는 다른 방법이 있습니다.c#프로젝트에서 사용했는데 다른 프로그래밍 언어로 사용할 수 있을 것 같습니다.

여기 사용법을 조금 설명하는 동영상이 있습니다.https://www.youtube.com/watch?v=y64L-3HKuP0

많은 사람들에게 이 문제의 핵심은 Tomeg가 사용한 오래된 방법을 사용하지 않으면 오래된 .exe를 서비스로 설치할 수 없다는 것입니다.그것을 동작시키기 위해서 필요한 Windows nt 툴킷을 찾을 수 없었습니다.

나는 궁지에 몰렸고 이것이 나의 탈출구였다.

언급URL : https://stackoverflow.com/questions/3582108/create-windows-service-from-executable