진행하고 있는 프로젝트에서 웹에서 사용자가 특정 메뉴 진입 시에 로컬에 설치되어 있는 프로그램을 실행시켜야 하는 상황을 만났다.
해당 과정을 해결하면서 발생한 이슈들을 간단하게 정리해두려고 한다.
프로그램 실행시키는 방법
웹에서 로컬 프로그램을 실행시키는 방법은 두 가지가 있다.
- ActiveX
- URL scheme (레지스트리)
예전에는 액티브X를 사용했지만 이는 IE에서만 사용가능한 방법이기 때문에 사실상 레지스트리를 이용한 방법밖에 없다고 봐도 무방하다.
사용자 컴퓨터에 등록되어있는등록되어 있는 URL 스키마를 이용해서 해당 프로토콜 주소로 이동하면 등록되어 있는 프로그램이 실행되도록 만드는 방법이다.
이를 위해서는 레지스트리에 스키마를 등록해 두는 작업이 필요한데 나의 경우에는 외부 프로그램이다 보니 설치파일을 수정하여 레지스트리를 등록시킬 수 없던 상황이었다.
이를 해결하기 위해서 batch파일을 만들어서 레지스트리 등록 -> 프로그램 설치가 되도록 만들어서 해당 파일을 통해서 설치가 되도록 유도하였다.
레지스트리 등록
먼저 레지스트리를 직접 등록하는 방법으로 어떤 key들이 들어가야 하는지 알아보겠다.
1. 먼저 win + R키를 눌러서 실행창을 킨 뒤 "regedit"을 입력해 준다.
2. HKEY_CLASSES_ROOT 하위에 키를 생성해 준다.
이때 키의 이름은 내가 사용할 이름으로 설정해 준다. (프로토콜의 이름이 된다.)
3. 생성된 Key에 문자열 값을 추가해 준 뒤 "URL protocol"이라 입력해 준다.
4. 만들어준 key의 하위 키를 만들어 준다. shell - open - command 순으로 만들어 주면 된다.
5. command키의 기본값데이터를 수정해 준다.
넣을 데이터 값은 "응용프로그램 절대경로" "%1"로 수정한다.
예를 들어 메모장은 다음과 같다. "C:\Windows\system32\notepad.exe" "%1"
6. 확인을 위해 인터넷 창을 띄운 뒤 key://로 이동하여 본다
해당 화면이 나오면 잘 설정된 것이다.
웹에서 이동시키기
단순히 해당 페이지로 이동시켜주면 끝이 난다.
// href="레지스트리KEY명://"
<a href="test://">실행</a>
// 인자값을 넘기는 경우
<a href="test://arg">실행</a>
배치파일로 레지스트리 등록하기
위의 방법으로 프로그램을 웹에서 실행시킬 수 있다.
다만 레지스트리를 반드시 등록해두어야 하는 방법이기 때문에 프로그램 설치할 때 레지스트리가 등록되도록 해야 한다.
나의 경우에는 프로그램 설치될 때 레지스트리 등록이 안 됐는데 설치프로그램을 변경할 수 없었기 때문에(외부 프로그램) 윈도우 배치파일을 이용해서 레지스트리에 등록되도록 만들었다.
@echo off
@chcp 65001
:: URL 프로토콜 이름
set "keyName=test"
:: 설치파일 이름 (현재는 같은 디렉터리 위치)
set "installFile=%~dp0\test.exe"
:: 실행파일(절대경로)
set "exeFile=C:\Program Files\example\test.exe"
:: 경로와 키 생성
reg add "HKEY_CLASSES_ROOT\%keyName%" /f
reg add "HKEY_CLASSES_ROOT\%keyName%" /v "URL protocol" /t REG_SZ /d "" /f
:: shell\open\command 하위 키 생성
reg add "HKEY_CLASSES_ROOT\%keyName%\shell\open\command" /f
:: command의 기본값 설정
reg add "HKEY_CLASSES_ROOT\%keyName%\shell\open\command" /ve /t REG_SZ /d "\"%exeFile%\" \"%%1\"" /f
echo 레지스트리 항목이 생성되었습니다.
:: 설치exe 실행
"%installFile%"
pause
다만 이방법은 레지스트리 등록 후에 프로그램 설치를 진행하기 때문에 프로그램 설치 유무와 관계없이 레지스트리가 등록되게 된다. 또한 레지스트리가 반드시 관리자 권한으로 실행되도록 해야 한다. (나는 바로가기를 만들어서 해결하였다)
현재 설치 프로그램이 제대로 설치되었는지 확인하는 방법이 없기 때문에(혹시 이글을 보는 사람 중에 아시는 분이 있다면 댓글로 알려주시면 감사하겠습니다.) 이렇게 만드는 것이 한계이다... ㅠㅠ 가능하면 애초에 설치파일을 만들 때 레지스트리에 등록이 되도록 만들어주는 것이 좋은 것 같다.