while(1) work();
article thumbnail
반응형

[2022-02-28 추가]

해결했습니다.

https://blog.youhogeon.com/59

 

[해결책] 대신증권 CYBOSPLUS 작업스케쥴러 등록시 동작 안함 (2)

[이전 글] https://blog.youhogeon.com/58 대신증권 CYBOSPLUS 작업스케쥴러 등록시 동작 안함 (1) 대신증권 CYBOSPLUS 또는 CREON PLUS는 ncStarter.exe 또는 coStarter.exe 에 아래와 같이 인자를 주면 자동 실..

blog.youhogeon.com

 

 

 

 

 

 

 

 

 


 

 

 

 

 

대신증권 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 에 문제가 있는게 아닌가 싶다.

 

 

 

 

 

 

 

 

몇일동안 만든 프로그램이 있는데

다 만들고 서버에 올리려니까 이런 문제가 발생하다니....

반응형
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그