[JavaScript] 웹(Chrome)에서 응용 프로그램(Local) 실행 시키기 - Registry를 이용한 URL 호출방법



웹에서 응용 프로그램(.exe)를 실행하는 방법을 설명합니다.

ActiveX를 이용할 수도 있지만 IE를 지양하는 상황에서 이 방법은 추천하지 않습니다.

대략적인 목차는 다음과 같습니다.

1. Registry에 Local에 저장된 (.exe)파일의 경로 설정 

2. Web에서 지정된 Registry를 바라보는 URL 호출 (APPNAME://ARGUMENTS)

목차에 따라 게시물을 1,2편으로 나누었습니다. (2편 링크)

테스트에 사용된 (.exe)파일 및 URL Scheme에 대한 내용은 여기를 참고하세요.



1. 응용 프로그램(.exe)를 실행시키기 위한 Registry 등록

1)  호출 URL에 들어갈 APP명으로 키를 생성합니다. (아래 예제는 "sample"로 명명했습니다.)

 HKEY_CLASSES_ROOT → [우클릭] → 새로 만들기 → 키

2) "1)"에서 만든 KEY에 문자열 값을 등록합니다.

 KEY [우클릭] → 새로 만들기 → 문자열 값

생성한 문자열 값의 "이름"을 "URL protocol"로 수정합니다.



3) 하위 KEY 생성

"1)"에서 생성한 KEY("sample") 하위에 동일한 방법으로 "shell" → "open" → "command" 순으로 생성합니다. 


4) "command"의 (기본값) 문자열 값 수정

 위에서 생성한 "command" 키에 (기본값) 항목의 데이터 부분을 

 "응용프로그램의 절대경로" "%1" 로 수정합니다.

 "%1"은 응용 프로그램 실행시 args[]에 들어가는 인자값으로 지정하되, 호출 시 사용하지 않아도 무방합니다.




2. 호출 테스트

Chrome 주소란에 위에서 생성했던 "KEY명://" 으로 접속합니다. 

아래 처럼 발생하는 팝업에서 "열기"를 누르면 응용 프로그램(.exe)가 실행됩니다. 

MSDN에서 제공하는 코드로 위와 같은 결과를 확인 할 수 있는 데요, 한 가지 의아했던 것은 명령 프롬프트(cmd)에서 직접 실행("App명" "인자") 했을 때와 결과가 다르단 것입니다.

URL 호출 시 URL 자체를 인자로 인식하는 것 같고 인자는 앞뒤 구분자 "/"가 들어갑니다.

(해당 원인은 좀 더 찾아봐야 할 것 같아요. 😂)


주의해야할 것은 위 처럼 URL 호출할 때 공백이나 특수문자의 경우 URL의 인코딩 처리됨으로 가급적 사용하지 않거나 호출된 프로그램에서 디코딩을 해야합니다.


# 명령 프롬프트 출력 (참고)



다음 게시글에서는 JavaScript에서 위에서 설정한 URL을 호출하는 방법에 대해서 다룹니다.

(2편 게시글 가기)


3 댓글

  1. 안녕하세요. 작성자님 글 잘 보았습니다. 저도 같은 현상인데 URL 이 인코딩 되어버리는 현상 해결 되시던가요? 저는 인자로 Local 파일 경로를 넣었는데 자꾸 URL 전체가 반한되더라구요.

    답글삭제
    답글
    1. 아쉽게도 해당 현상은 해결하지 못했습니다.. ㅠㅠ
      저는 프로젝트에서 응용프로그램이 타사제품이라 해당 업체 담당자분과 협의했습니다..
      음.. Local 파일 경로라는 것이 유동적으로 변하는 것이 아니라면,
      위 내용처럼 Registry에 말씀하신 경로를 넣고 Key값을 인자로 하는 건 어떨까요?
      응용 프로그램에서 Registry Key를 보고 그 키에 등록된 경로를 가져오는 것으로요

      저의 경우 웹과 연계되는 응용 프로그램(.exe)이 모두 참조하는 Registry를 두었고,
      이 Registry 등록을 하는 (.batch) 파일을 따로 실행시키는 것으로 Local 환경에서의 경로를 관리했었습니다..!

      삭제
  2. 글 잘 읽었습니다. 혹시 해당 레지스트리가 없을때 , try catch로 잡아서 문구를 띄워 주려고 해보았는데 잡히지가 않더라구요 혹시 이부분에 대해서 어떻게하면 해당 레지스트리가 없을때 문구를 띄울수 있을지 알수 있을 까요?

    답글삭제