Microsoft/Windows
윈도우 서비스 등록
구차니
2025. 2. 18. 12:01
심심해서(?) go로 작성한 echo 서버를 크로스빌드하고 서비스 등록했는데
"시작중"이 뜨다가 "종료됨"으로 떠버린다.
프로그램이 서비스로 작동하기 위해서는 일반적인 프로그램을 실행하면 안되는건가 싶기도 한데..
빌드는 아래와 같이 하고
$ go mod ninit $ go mod init echo $ go mod tidy $ GOOS=windows go build |
[링크 : https://github.com/venilnoronha/tcp-echo-server]
[링크 : https://dadev.tistory.com/entry/GO-Windows-macOS-및-Linux용-Go-프로그램을-교차-컴파일하는-방법]
한번 그냥 실행해서 방화벽 예외 추가해주고, 관리자 권한의 콘솔에서 아래와 같이 입력해주면 끝
C:\Windows\system32>sc create "echo service" binPath= "c:\echo\echo.exe 9000 hello" [SC] CreateService 성공 C:\Windows\system32>sc delete "echo service" [SC] DeleteService 성공 |
[링크 : https://blog.naver.com/battle50/220311915822]
특이하게도 옵션 이름에 =가 붙어야 해서 =" 하면 안된다.
C:\Windows\system32>sc create "echo service" binPath ="c:\echo\echo.exe 9000 hello" 설명: 레지스트리 및 서비스 데이터베이스에 서비스 항목을 만듭니다. 사용법: sc <서버>create [서비스 이름] [binPath= ] <옵션1> <옵션2>... 옵션: 참고: 옵션 이름은 등호(=)를 포함합니다. 등호와 값 사이에는 공백이 한 칸 있어야 합니다. type= <own|share|interact|kernel|filesys|rec|userown|usershare> (default = own) start= <boot|system|auto|demand|disabled|delayed-auto> (default = demand) error= <normal|severe|critical|ignore> (default = normal) binPath= <.exe 파일에 대한 BinaryPathName> group= <LoadOrderGroup> tag= <yes|no> depend= <종속성(슬래시(/)로 구분)> obj= <AccountName|ObjectName> (default = LocalSystem) DisplayName= <표시 이름> password= <암호> |
테스트는 리눅스에서 아래와 같이 테스트 하면 끝. telnet에서 ctrl-c,d,z를 다 패스시키니
ctrl-[ 를 이용해서 메뉴로 나와 종료해야 한다.
$ telnet 192.168.220.253 9000 Trying 192.168.220.253... Connected to 192.168.220.253. Escape character is '^]'. hello d hello d ^] telnet> quit Connection closed. |
[링크 : https://superuser.com/questions/486496/how-do-i-exit-telnet]