반응형

오늘은 CustomURI 적용방법에 대해 포스팅을 할 까 합니다.

 

http://www.naver.com

ftp://10.220.10.123

 

위와 같이 http, ftp 와 같은 것이 URI Scheme 이다.

 

Custom URI는 저런 http, ftp대신 임의로 내가 만든 URI Scheme를 적용하는 것이다.

(이 방법은 Windows 와 Exploer 기반이며, 레즈스트리 등록으로 인하여 적용하게 된다.)

 

그럼 URI Scheme 이후에 내용들은 무엇일까? 개발자 측면에서 Parameter 라고 생각하면 된다.

내 경우, Web에서 Pc App(EXE 실행파일)을 실행시키기 위한 것을 검토하다가 

Active X와 같은 방식을 고민하다가, Custom URI를 찾게 되었다.

 

소개차원에서 설명에 쓰인 예제의 프로그램 이름은 "testprogram.exe" 이다

또한 Custom URI 이름도 "testprogram"으로 하였다.

 

 

[Registry tree 구성]

 

- HKEY_CLASSES_ROOT 아래에 CustomURI 이름으로 할 것의 Key 추가 (예제에서는 testprogram)

- shell Key 추가

- (Optional) DefaultIcon 은 필수는 아니지만, Icon을 보여주게 하고 싶다면 추가한다.

- shell 하위에 open Key 추가

- open 하위에 command Key 추가

 

[value 입력]

 

- testprogram 내에 string "URL Protocol" Key 추가, value는 입력하지 않는다.

- (Optional) DefaultIcon 내에 기본값에 해당하는 ico path를 넣는다.

- command 내에 기본값에 해당하는 프로그램 path를 넣는다.

- 만약 프로그램이 매개면수를 받아서, 처리할 것이 있다면, 패스 뒤에 "%1" 를 넣어야한며,

- 앞뒤 공백을 "로 묶어주자 "..exe" "%1" (글 하단 NSIS 예제에 그림이 있다)

 

 

 

 

 

[TEST]

 

- Internet Explorer url 입력창에 testprogram:parameter1 라고 입력해본다.
- 안된다면, testprogram://parameter1 이라고 해보자

 

 

- 실행이 되었지만..... 하지만... 경고창이 뜰 것이다. 간단하다. 경고창 제어를 해보자

(아래 사진은 1234를 Parameter로 넣었다)

 

 

 

[경고창 제어]

 

 

- HKEY_CURRENT_USER / SoftWare / Microsoft / Internet Explorer / ProtocolExecute 에 가서

- Custom URI로 등록한 이름의 Key를 추가한다.

- Key 내에 WarnOnOpen DWORD 값 Key 추가, Value는 0

 

자 경고창까지 뜨지 않는다. 끝났다! 마치지만, 더 참고될만한 내용은 아래에 있다.

 

[지금까지 레지스트리 등록한 것을 내보내기 한 배치파일을 참고]

 

 

Windows Registry Editor Version 5.00

 

[HKEY_CLASSES_ROOT\testprogram]

"URL Protocol"=""

 

[HKEY_CLASSES_ROOT\testprogram\DefaultIcon]

@="D:\\testprogram\\testprogram.ico"

 

[HKEY_CLASSES_ROOT\testprogram\shell]

 

[HKEY_CLASSES_ROOT\testprogram\shell\open]

 

[HKEY_CLASSES_ROOT\testprogram\shell\open\command]

@="\"D:\\testprogram\\testprogram.exe\" \"%1\""

 

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ProtocolExecute\testprogram]

"WarnOnOpen"=dword:00000000

 

매개변수를 받을 경우 입력방법에 주목하자

[HKEY_CLASSES_ROOT\testprogram\shell\open\command]

@="\"D:\\testprogram\\testprogram.exe\" \"%1\""

 

[NSIS Script] , NSIS Script를 이용한, 레지스트리 등록 예제]

 

 

위쪽은 셋업후 Post 부분이라고 생각하면 되고, 하단은 삭제시 라고 생각하면 된다.

 

매개변수를 받는 부분 작성할때 주의하자. \ 구분자앞에 $ 사용

 

"$\"$INSTDIR\testprogram.exe$\" $\"%1$\""

이해가 어렵다면 실제 저장된 레지스트리를 수정하고자 보게 되면 아래와 같다.

 

 

 

[C# Custom URI 파라미터 받아오기]

 

 
실수할 수 있는 부분이 testprogram:1234 에서 파라미터가 "1234"로 오는 것이 아니라
"testprogram:1234" 가 파라미터로 온다.
 
Environment.GetCommandLineArgs()로 받아온 뒤에 콜론(:) 으로 Split 하거나 
CustomURI: 를 치환해서 사용하도록.. 한다..
 
감사합니닷 :)

 

 

반응형
Posted by Rainfly
l