본문 바로가기
Programming/Tips(C++,C#)

CustomURI - Web에서 클라이언트 실행하기

by 곰네Zip 2022. 7. 27.

오랫동안 WebPage에서 Client프로그램을 실행하기 위해서 ActiveX를 썼었다.

ActiveX를 요청하면 걔가 Client를 구동하는 형식.

이런거 요즘 다 막힌다. 보안문제로.. (하지만 여러 악성 ActiveX가 난립하던 환경이 사라져서 환영하는 1인)

근데 웹에서 Client를 실행할 수 있는 방법이 있다.

특정 URI로 전달하면 윈도우가 레지스트리를 찾아서 그 URI가 있으면, 해당 URI에 정의된 클라이언트 프로그램을 실행하는 방식이다.

이 방법은 ActiveX보다 더 안전한것 같다.

먼저, ActiveX는 서버가 클라이언트에 프로그램을 배포하고, 그 배포된 프로그램이 동작한다. -> 뭘 배포할지 어떻게 아냐

CustomURI는 클라이언트에 프로그램을 설치하면서, 특정 레지스트리에 값을 기록하고, 윈도우에서 그 URI가 있는 경우에만 실행해준다. -> 클라이언트에 설치된 녀석만 구동되므로, 아무거나 실행되지 않는다.

Custom URI를 설정하기 위해서는 특정 레지스트리에 등록해주면 된다.

[HKEY_CLASSES_ROOT\MyURI]
"URL Protocol" = ""

[HKEY_CLASSES_ROOT\MyURI\shell]

[HKEY_CLASSES_ROOT\MyURI\shell\open]

[HKEY_CLASSES_ROOT\MyURI\shell\open\command]
@="${실행파일위치}" "%1"

[HKEY_CLASSES_ROOT\MyURI\DefaultIcon]
@="${아이콘파일위치}"

위와 같이 작성되면 된다.

코드상에서 집어넣기 위해서는 특수문자를 처리해야한다. "글자를 표시하기 위해서는 \"로 적어주면 된다. \는 \\로..

예를들어 실행파일이 D:\My Test\Test.exe라면

@="\"D:\\My Test\\Test.exe\" \"%1\""

DefaultIcon은 필요하면 추가하는거고, 필요없으면 없어도 된다.

이와 같이 추가해주면 된다. 

그리고 중요한거. %1이 붙는 경우는 실행시 파라미터가 필요한 경우에만 붙인다.

실행 시 파라미터가 전혀 필요없다면 %1은 붙이지 않아도 된다. 

이렇게 추가하고나면, 크롬이든 IE든.. 브라우저창에서 MyURI:Params로 넘어온다.

만약 웹에서 링크를 건다면 아래처럼

<a href="MyURI:Params" />

그리고 %1이 넘어오면..

MyURI:Params로 넘어온다.

그러니 알아서 파싱 잘해야 한다..

그리고 공백이나 |등 특정 문자로 구분지으면 URL이 Encoding되어 들어온다.

이것도 같이 고려하자.

 

그리고 덤으로..

Custom URI를 호출하면, 실행하겠습니까? 라는 팝업이 뜬다.

근데 이거는 특정 레지스트리에 값을 추가해야한다.

추가할 곳은 두군데.

Internet Explorer용 레지스트리와

Chrome용 (Chrome을 추가하면 엣지도 같이 적용된다. 오페라나 웨일은 어떤지 확인 필요)

반응형

댓글