윈 도 우 포터블 프로그램 우클릭 메뉴
2011.06.26 13:23
일반적인 사용자가 우클릭 메뉴를 레지스트리에 등록할 ?때 ?shell 키를 이용하여 등록합니다.
예를 들어 .txt 파일에 관련된 응용프로그램을 등록할 경우 다음과 같은 형식입니다.
[HKEY_CLASSES_ROOT\txtfile\shell\MyApp]
@="테스트 입니다."
[HKEY_CLASSES_ROOT\txtfile\shell\MyApp\command]
@="D:\\Test\\MyApp.exe \"%1\"" --> 보기 쉽게하면 D:\Test\MyApp.exe %1 입니다.
위와 같은 방식 이외에 응용프로그램을 설치하면 다른 방식을 이용해 우클릭메뉴에 등록하는 경우가 있습니다.
레지스트리를 아무리 검색해 보아도 '압축파일에 추가, 압축해서 이메일 보내기...등등'을 찾을 수 없습니다.
알고 보니, DLL 파일을 이용한 우클릭 메뉴 등록 방법이 따로 있습니다.
첫번째의 shell 키를 이용해 등록하는것을 Static Shortcut Menu 라 부르고, 두번째의 DLL 파일을 이용해 등록하는 것을 Dynamic Shortcut Menu 라고 부릅니다. Shortcut Menu = Context Menu = 우클릭 메뉴 입니다.
DLL 파일을 이용해 등록하는 경우는 shell 키가 아닌 shellex\ContextMenuHandlers ?키를 사용합니다.
7-Zip 을 예로 들면,
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"
--> * 은 모든 파일을 의미합니다. 모든 파일에 위 우클릭 메뉴를 사용할 때의 경로입니다.
경로 마지막의 7-Zip 이라는 키 이름은 임의적으로 변경 가능한데 이름을 변경한다 하더라도 우클릭 메뉴에 변경된 이름이
표시되는 것은 아닙니다. 위에 나타난 우클릭 메뉴는 전적으로 DLL 파일 내부에 규정된대로 나타납니다. 물론 환경설정에서
우클릭 메뉴에 대한 설정을 변경할 수 있는데 이 부분은 [HKEY_CURRENT_USER\Software\7-Zip] 경로에 관련 설정이 등록되어 제어가 이루어 집니다.( 별개의 문제입니다.)
{23170F69-40C1-278A-1000-000100020000} 는 7-Zip의 고유한 CLSID (Class Iidentifier: 클래스 식별자) 입니다. 마찬가지로
DLL 파일 내부적으로 규정되어 있고 임의적으로 할당할 수 없습니다. GUID 형식을 취합니다.
[HKEY_CLASSES_ROOT\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32]
@=?"D:\\7-Zip\\7-zip.dll"
"ThreadingModel"="Apartment"
--> 처음에 ContextMenuHandlers의 7-Zip 키에 CLSID 값을 지정했으므로, 이 번에는 CLSID 값에 구체적인 정보를 지정해 줍니다. 구체적인 정보라 해봐야 7-zip.dll 파일의 경로를 지정해 주는 것 뿐입니다.??? (그 외에는 하나의 정형화된 형식입니다.)
이 두가지 레지스트리를 등록해주면 7-Zip 의 우클릭 메뉴를 사용할 수 있습니다. 생각보다 간단합니다.^^
추가로 위에서 모든 파일의 경로에만 등록했으므로 디렉토리 우클릭에서도 사용하려면 * 을 directory 로 바꾸어서 추가로 등록해야 사용할 수 있습니다.
CLSID 값이나, 우클릭 메뉴를 담당하는 파일이 어떠한 파일인가는 실제로 설치를 해본다음 7-Zip 으로 검색하여 ContextMenuHandlers\7-Zip 키를 찾아서 CLSID 값을 찾고 다시 CLSID 값을 검색하여 등록된 DLL 파일을 찾아서 알 수 있었습니다.
CLSID, InprocServer32, ThreadingModel, Apartment 용어들은 저도 잘 모르고 설명하기도 쉽지 안네요.
참조 링크로 대신합니다.- https://webdizen.new21.net/blog/1872
7-zip.dll 파일은 regsvr32.exe 로 레지스트리에 등록할 수 있게 되어 있습니다. 다음은 regsvr32.exe 로 7-zip.dll 파일을 등록했을 때 등록되는 레지스트리입니다.
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}]
@="7-Zip Shell Extension"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32]
@="D:\\7-Zip\\7-zip.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"
위에서 든 예에서는 이중에서 중간 부분만 취해서 사용했습니다. regsvr32.exe 를 이용할 경우 CLSID 부분은 등록되었으니 shellex\ContextMenuHandlers\7-Zip 부분만 등록하면 사용할 수 있습니다.
이에 반해서 UltraISO 같은 경우는 우클릭 메뉴를 담당하는 파일이 isoshl64.dll 인데 regsvr32.exe 로 우클릭에 관련된 모든 레지스트리를 완벽하게 등록합니다.( x64- isoshl64.dll, x86-isoshell.dll 을 사용합니다. 실제 설치 후 레지스트리 검색을 통해 알아 냈습니다.)
마지막 부분 에러 메세지를 해결하기 위해서는 따로 더 등록해 주어야 되는 부분이 있습니다.
[HKEY_CURRENT_USER\Software\EasyBoot Systems\UltraISO\5.0]
@="D:\\UltraISO"
제가 사용했던 UltraISO 포터블 파일은 %temp% 폴더에 압축을 풀고 실행시키는 방식이었는데 압축을 푼 파일을 복사해서 사용한 것입니다. x86 기반에서 제작된 방식이라 isoshl64.dll 파일이 없어서 따로 설치후 복사해서 사용했습니다. 이 레지스트리를 찾아내는데 고생좀 했는데 알고보니 원본 포터블 파일은 위와 같은 레지스트리를 시작전에 미리 등록하고 시작하는 방식이었습니다. ^^
이번 예는 Beyond Compare 3 라는 비교 유틸입니다.
BCompare.exe 라는 파일만 하나 있는 포터블인데 실행시키면 현재 폴더에 BCompare 폴더를 만들고 필요한 정보를 저장합니다. BCShellEx64.dll 은 원본을 설치해서 복사해온 것입니다. regsvr32.exe 로 레지스트리 등록하는 것을 지원하지 않습니다.
다음과 같이 등록하면 사용할 수 있습니다.
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\CirrusShellEx]
@="{57FA2D12-D22D-490A-805A-5CB48E84F12A}"
[HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers\CirrusShellEx]
@="{57FA2D12-D22D-490A-805A-5CB48E84F12A}"
[HKEY_CLASSES_ROOT\CLSID\{57FA2D12-D22D-490A-805A-5CB48E84F12A}\InProcServer32]
@="D:\\BCompare\\BCShellEx64.dll"
"ThreadingModel"="Apartment"
다음은 Hash를 체크할 수 있는 유틸(HashCheck.dll) 에 대한 예입니다.
HashCheckInstall-2.1.11.exe 를 실행해서 설치하면 x64용, x86용 HashCheck.dll 을 System32, SysWOW64 폴더에 각각 설치합니다. 그리고 제작자 정보, 버전 정보등도 추가로 레지스트리 등록합니다. 그 중 System32 폴더에 설치된 HashCheck.dll 파일을 복사해와서 regsvr32.exe로 등록해서 사용할 수 있습니다. regsvr32.exe 보다 레지스트리 등록되는 것을 줄이려면 다음과 같이 등록하면 위 두가지 기능을 사용할 수 있습니다.
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\PropertySheetHandlers\HashCheck Shell Extension]
@="{705977C7-86CB-4743-BFAF-6908BD19B7B0}"?
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\HashCheck Shell Extension]
@="{705977C7-86CB-4743-BFAF-6908BD19B7B0}"
[HKEY_CLASSES_ROOT\CLSID\{705977C7-86CB-4743-BFAF-6908BD19B7B0}\InprocServer32]
@="D:\\HashCheck\\HashCheck.dll"
"ThreadingModel"="Apartment"
첫번째 속성창은 ContextMenuHandlers 대신에 PropertySheetHandlers 키를 사용한다는 점이 다릅니다.
기타 shellex 키에 등록해 사용할 수 있는 Handlers 에 관해서 https://msdn.microsoft.com/en-us/library/cc144110.aspx
를 참조해 보세요.
댓글 [4]
-
맥시머 2011.06.26 19:24 -
eunnano 2011.06.26 22:11 저도 다른 사람들로 부터 얻은 정보일 뿐입니다.^^
-
Orpheus 2011.06.26 22:38 언제부턴가 이런오류가뜨는데요 (오른쪽클릭->숨김파일보이기 기능이있었거든요)
이거 해결안될까요;;
-
eunnano 2011.06.27 06:05 오류 메세지만 봐서는 C:\windows 폴더에 있는 SuperHidden.vbs 파일의 두번째행 첫번째 문자가 잘못된 것 같습니다.
해당 .vbs 파일을 첨부하여 질답란에 질문해 보시는게 좋을 것 같습니다.
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 강좌 작성간 참고해주세요 | gooddew | - | - | - |
1059 | 윈 도 우| ReadyFor4GB 사용 후 부팅메뉴 빨리 지나가게 하기 [7] | OLokLiR | 12124 | 0 | 06-02 |
1058 | 소프트웨어| BB FlashBack으로 우리도 사용후기 멋진 동영상으로 올려보... [7] | 레드 썬 | 6826 | 0 | 06-02 |
1057 | 소프트웨어| BB FlashBack으로 우리도 사용후기 멋진 동영상으로 올려보... [4] | 레드 썬 | 6444 | 0 | 06-02 |
1056 | 소프트웨어| BB FlashBack으로 우리도 사용후기 멋진 동영상으로 올려보... [7] | 레드 썬 | 8584 | 0 | 06-02 |
1055 | 윈 도 우| 이동-복사-바로가기키 Win7 유용한_키 [7] |
|
7424 | 0 | 05-31 |
1054 | 윈 도 우| Win7 -우클릭 메뉴 (모음&자작) [19] |
|
13509 | 0 | 05-29 |
1053 | 소프트웨어| 포터블앱스의 자바(JRE) 포터블 설치 및 사용법 [4] | -수- | 8664 | 0 | 05-27 |
1052 | 소프트웨어| Nightly 7.0a1 부가기능 호환성 문제 해결 | 그레이스 | 5464 | 0 | 05-26 |
1051 | 윈 도 우| 외장그래픽인데도 사용가능메모리<설치메모리 해결하기 [4] |
|
12572 | 0 | 05-26 |
1050 | 소프트웨어| chrome 주소창 제거방법 [4] |
|
10472 | 0 | 05-22 |
1049 | 윈 도 우| 빈 탭에 표시되는 ''자주 방문하는 사이트'' 줄의 수 늘리... [3] |
|
14651 | 0 | 05-21 |
1048 | 하드웨어| 요즘 2.4g 무선 키보드 및 마우스 많이 쓰시죠. [17] | SYSTEM | 15814 | 0 | 05-18 |
1047 | 소프트웨어| 자막 싱크시간 일괄변경 스크립트 [5] | 우금티 | 7687 | 0 | 05-18 |
1046 | 윈 도 우| 테크넷버전5.12일짜. W7SP1의 핵심 KB2534111,KB699702 [19] |
|
12318 | 0 | 05-17 |
1045 | 윈 도 우| KB2534111 설치에러 대처법 [3] | ▒벗님▒ | 9872 | 0 | 05-17 |
1044 | 소프트웨어| ?Torrent 2.2~?Torrent 2.2.1(build 25130)의 디스크 과부... [7] | 레고르 | 8824 | 0 | 05-17 |
1043 | 소프트웨어| 푸바 upnp Component + PlugPlayer [2] | ♥ZARD | 9955 | 0 | 05-17 |
1042 | 윈 도 우| 수동으로 간단하게 시스템 손보기... [9] |
|
8720 | 0 | 05-16 |
1041 | 윈 도 우| 윈도우 7 & 비스타 자녀보호 설정하기... [14] |
|
7292 | 0 | 05-15 |
1040 | 윈 도 우| VHD 부팅의 활용 방안 [6] | 초록 날개 | 14017 | 1 | 05-15 |
소중한 지식 감사합니다.