Front/JavaScript

[JavaScript] Custom URL schemes 방식의 VNC 응용프로그램 (서버IP 인자 값 넘기며) 호출

헹창 2022. 1. 13.
반응형

[JavaScript] Custom URL schemes 방식의 VNC 응용프로그램 (서버IP 인자 값 넘기며) 호출 방안

 

 

Custom URL Schemes 방식의 호출에 대한 자세한 설명은 아래 게시글을 참고하자.

 

[JavaScript] 웹(Chrome)에서 응용 프로그램 실행 시키기 : Registry 이용한 Custom URL schemes 방식 호출

[JavaScript] 웹(Chrome)에서 응용 프로그램 실행 시키기 : Registry 이용한 Custom URL schemes 방식 호출 만약 프로젝트를 각 PC 배포하여 사용한다면 사용자의 레지스트리를 수정할 필요없이 Java로 간단

haenny.tistory.com

 


 

RealVNC 2002-2008 버전 Custom URL schemes 호출 오류
unable to resolve host by name: 알려진 호스트가 없습니다. (11001)

 

RealVNC 최신버전 Custom URL schemes 호출 오류
Invalid endpoint: port not correctly specified

 


문제 직면

이전 게시글을 보고왔다면 알다시피 문제는 다음과 같았다.

Registry 인자 값 설정("%1")이 되어있는 상태에서는 인자 값을 넘기든, 안넘기든 모두 실행되지 않았다.

 

오류 시 설정

 

 

반면에 인자 값 설정을 뺀 채로 호출을 할 경우에는 실행이 잘됐다.

인자 값 설정을 뺀 채 URL 호출 시 실행된 화면

 

 

하지만 나는 Server IP 까지 넘긴 채로 VNC Viewer를 실행시키고 싶었다.

 

 

의문이 드는 건, Registry 설정을 한 부분이 command 명령어를 그대로 담은 것이라 생각을 했는데, 그러면 실제 cmd 창에서도 같은 구조의 명령어를 입력했을 때 같은 결과가 나와야하는 게 아닌가였다.

 

하지만 다음과 같이 명령프롬포트창에 명령어를 입력했을 때는 Server IP가 세팅된 채로 실행이 잘 됐다.

 

 

그렇다면 문제는 Registry에서 설정한 "%1" 인자 값의 형태가 무언가 잘못됐다는 것이다.

(정말 정확한 로직과 원인은 아직 잘 모르겠다. 앞으로 해결되는 과정은 추측일 뿐이다)

 

 


문제 원인

 

확인을 해보니 "test://127.0.0.1:5900" 으로 호출을 했을 때, 내부적으로 다음과 같이 명령어가 입력될 것이라고 생각했다

 

test 는 Registry에서 생성한 command 명령어( "C:\ULSAN_BIS\VNC\vnc-viewer.exe" "%1" )에서 '%1''127.0.0.1:5900' 으로 치환될 것이라고 생각했다.

 

결론적으로 "C:\ULSAN_BIS\VNC\vnc-viewer.exe" ""test://127.0.0.1"5900"" (인자 값 따옴표도 두번이나 들어감) 으로 호출되었던 것이다.

 

Registry App Key 값이 Server IP 앞에 붙여서 연결을 시도했던 것이다.

 

 

 


문제 해결

 

드디어 사수님의 도움을 받아 해결이 되었다.

일단 당장 해결을 해야했기 때문에 생각한 방안이 서버 IP 앞에 붙는 앱 키(test:)부분을 치환해주는 것이다.

 

레지스트리에서는 방법을 아직 찾지 못해 bat 파일을 만들어 치환한 상태로 호출이 되게 할 것이다.

 

 

1. 배치 파일 생성

 

원하는 경로에 배치파일을 생성한다. 

 

메모장을 만들어 저장할 때 .bat로 저장하면된다.

나는 테스트하기 좋게 일단 VNC 응용프로그램과 같은 경로에 vnc-viewer.bat 파일을 생성했다.

 

 

 

bat 파일의 내용은 다음과 같이 세팅해주었다.

 

SET S=%1
SET S=%S:~7,-1%
call "C:\ULSAN_BIS\VNC\vnc-viewer.exe" "%S%"
exit

 

%1의 부분을 S라는 변수로 받고, 그 값의 자릿수를 치환해주는 것이다.

각자의 레지스트리 앱키 명에 따라서 자릿수가 다를 수 있다.

 

레지스트리 앱키 명 : test
""test://서버IP"" 에서 "test:// 부분과 뒤에 따옴표(")하나를 치환해주어야 한다.
인덱스로 0 ~ 7번째 인덱스와 뒤에서 한자리인 (-1)로 설정해준다.

 

 

그리고 실행을 하게 되면 다음과 같이 명령프롬포트 창이 함께 열리고, 실행과정의 로그가 찍히면서 VNC가 실행된다!

 

 

 

만약 명령프롬포트 창에 치환과정과 접속하는 코드를 표출하고 싶지 않으면 @Echo off 를 추가해준다

 

@Echo off
echo autorun VNC viewer...
SET S=%1
SET S=%S:~7,-1%
call "C:\ULSAN_BIS\VNC\vnc-viewer.exe" "%S%"
exit

 

 

그럼 아래와 같이 echo로 작성한 문자가 표출되는 것을 볼 수 있다 

 

 

 

 

728x90
반응형

댓글

추천 글