[2022-02-28 추가]
해결했습니다.
대신증권 CYBOSPLUS 또는 CREON PLUS는 ncStarter.exe 또는 coStarter.exe 에 아래와 같이 인자를 주면 자동 실행이 가능하다. (관리자 권한 실행 필요)
ncStarter.exe /prj:cp /id:?? /pwd:?? /pwdcert:?? /autostart
이를 코드상에서 실행하거나
Runtime.getRuntime().exec("C:\\DAISHIN\\STARTER\\ncStarter.exe /prj:cp /autostart /id:" + id + " /pwd:" + pw + " /pwdcert:" + pw2);
배치파일로 만들어서 실행하는 경우에는 문제가 없다.
path C:\DAISHIN\STARTER\;
start ncStarter.exe /prj:cp /id:? /pwd:? /pwdcert:? /autostart
그런데 이상하게 작업스케쥴러에 등록해서 실행하는 경우 동작하지 않는다.
정상 동작하는 경우에는
ncStarter.exe 실행
-> ncStarter.exe가 dibserver.exe 와 cpstart.exe 를 실행
-> ncStarter.exe가 스스로 종료됨
-> dibserver.exe와 cpstart.exe가 대신증권 서버와 통신하며 API 제공
과 같은 순서로 프로세스가 올라오거나 죽어야하지만
작업스케쥴러에서 해당 배치파일을 실행하거나 해당 코드가 들어간 응용프로그램을 실행하면
ncStarter.exe 실행
-> ncStarter.exe가 dibserver.exe 와 cpstart.exe 를 실행
-> cpstart.exe가 시작되자마자 스스로 종료됨
-> ncStarter.exe가 죽지 않음
-> 대신증권 서버와 통신 불가
이런 문제가 발생한다.
처음에는 자바 코드를 잘못 작성한 줄 알고 코드를 이래저래 바꿔가며 실험했지만
배치파일에서도 똑같이 동작하는 것을 보면 그건 아닌듯 하다.
당연히 작업스케쥴러 수동으로 실행하기 전에 관련 프로세스는 모두 끈 상태에서 진행했다.
"사용자가 로그온할 때만 실행" 을 선택하는 경우 백그라운드가 아니라 포어그라운드에서 동작하기 때문에 아무 문제가 없다. 하지만 서버를 매일 재시작 시켜주어야 하는 상황이기 때문에 로그온 상태를 보장할 수 없어 해당 옵션을 사용할 수 없다.
과거에 개발할때는 이런 문제가 없었는데
과거에 잘 쓰던 코드를 지금 실행해보니 이것 역시 동작하지 않는다.
무언가 대신증권측의 보안 정책이 변경된게 아닌가 싶은 생각이 들지만 확인할 방법이 없다.
C:\DAISHIN\STARTER\ncStarter.log 를 확인해보면 아래와 같다.
정상 작동시
(생략)
[18:40] [0] [CSignOnDlg::OnAccExtInfo] 사인온 추가정보 요청 성공
[18:40] [0] [CncStarterDlg::DoSignOn] 사인온 성공
[18:40] [0] [CncStarterDlg::WriteTraceLog] I3GManager NPSenderFunc 함수 실행 시간(78)
[18:40] [0] [CncStarterDlg::WriteTraceLog] CS_SIGN_ON > 사인온 시간(2218)
[18:40] [0] [CNFWrapper::CallNetFunnel] 번호표 반납 실행
[18:40] [0] [CncStarterDlg::WriteTraceLog] CS_SIGN_ON > 티켓반납 시간(0)
[18:40] [0] [CncStarterDlg::DoExec] [DoExec]
[18:40] [1] [CncStarterDlg::GetProjectPath] GetProjectPath() : C:\DAISHIN\STARTER
[18:40] [1] [CncStarterDlg::GetProjectPath] GetProjectPath() : C:\DAISHIN\ncfsys
[18:40] [1] [CncStarterDlg::GetProjectPath] GetProjectPath() : C:\DAISHIN\CYBOSPLUS
[18:40] [1] [CVerifyApplication::SetProect] CVerifyApplication SetProect : ncfsys_hts.crc
[18:40] [0] [CVerifyApplication::ReadCRC] CRC 파일 [C:\DAISHIN\ncfsys/ncfsys_hts.crc] - 총 342 개 파일
스케쥴러로 실행시(비정상 작동)
(생략)
[18:19] [0] [CSignOnDlg::OnAccExtInfo] 사인온 추가정보 요청 성공
[18:19] [0] [CncStarterDlg::DoSignOn] 사인온 성공
[18:19] [0] [CncStarterDlg::WriteTraceLog] I3GManager NPSenderFunc 함수 실행 시간(78)
[18:19] [0] [CncStarterDlg::WriteTraceLog] CS_SIGN_ON > 사인온 시간(1938)
[18:19] [0] [CNFWrapper::CallNetFunnel] 번?
일부러 끊은게 아니라 진짜 로그가 "번"에서 멈춘다.
이 때 cpStart.exe가 강제 종료되어서 로깅이 이루어지지 않는것으로 추측한다.
여러번 시도해본 결과 항상 저 타이밍에 멈추는 것을 보아 CallNetFunnel 에 문제가 있는게 아닌가 싶다.
몇일동안 만든 프로그램이 있는데
다 만들고 서버에 올리려니까 이런 문제가 발생하다니....
'버그와 삽질' 카테고리의 다른 글
[serverless framework] custom domain 연결 삽질기 (0) | 2022.08.22 |
---|---|
AWS 비용감소 후기 (0) | 2022.08.19 |
serverless framework에 IAM 최소 권한 부여하기 (0) | 2022.08.17 |
[serverless framework] lambda+API Gateway에서 CORS 허용하기 (0) | 2022.08.16 |
[해결책] 대신증권 CYBOSPLUS 작업스케쥴러 등록시 동작 안함 (2) (0) | 2022.02.28 |