본문 바로가기
Language/C++

regsvr32 사용 및 구현 정리!

by Lohen 2016. 2. 4.
1. regsvr32 사용시 띄어쓰기 들어간 Path(Program Files폴더등)에 있는 파일 등록방법!!

regsvr32.exe /s "PATH_NAME" (cmd창에서도 인자를 ""로 감싸면 등록이 된다.)

이런식으로 인자를 넣어주면 뒤에 공백이 들어가도 처리가 된다.


* 문자열 안에 \" 를 입력하면  " 로 인식된다.
 WinExec("regsvr32.exe \"C:\\Program Files\\GSC\\BBHCM581ViewAx.ocx\"", SW_HIDE);


ShellExevuteEx함수를 이용하면 더 쉬울꺼 같고

아니면 bat파일을 만들어서 실행하는것도 한가지 방법!



2. *bat을 이용한 직접실행과 *.reg를 이용한 레지스트리 등록 방법!

1) 직접전달(bat파일로 실행)
MYREGSVR.BAT (이름은 맘대로) 을 만든다. 내용은 다음 딱 한줄.

regsvr32 %1

 

* 첫 번째 방법:

Taskbar에 REGSVR.BAT파일을 드래그 하여, 빠른실행(Quick Launch) 바에 복사해 넣는다.

그리고 빨간 동그라미가 있는 부분에 dll이나 ocx파일들을 드래그앤드롭하면 끝!

 

* 두 번째 방법:

보내기(SendTo) 디렉토리에 REGSVR.BAT 파일을 복사해 넣는다.

-> XP기준 계정이 Administrator라면 C:\Documents and Settings\Administrator\SendTo가 되겠다.

그러면 탐색기등에서 DLL, OCX파일을 선택하고 마우스 오른쪽 버튼 누른 후 메뉴에서 보내기를 MYREGSVR.BAT에 하면 끝!

 

2) 레지스트리에 등록(dll,ocx 선택시 마우스 오른쪽메뉴'context menu'에 자동으로 메뉴가 나오게..)


'REGSVR.reg'의 내용을


REGEDIT4

[HKEY_CLASSES_ROOT\dllfile\shell\레지스트리등록(&R)\Command]

@="\"regsvr32\" \"%L\""

 

[HKEY_CLASSES_ROOT\dllfile\shell\레지스트리등록해제(&U)\Command]

@="\"regsvr32\" /u \"%L\""

 

[HKEY_CLASSES_ROOT\ocxfile\shell\레지스트리등록(&R)\Command]

@="\"regsvr32\" \"%L\""

 

[HKEY_CLASSES_ROOT\ocxfile\shell\레지스트리등록해제(&U)\Command]

@="\"regsvr32\" /u \"%L\""

 

이렇게 써준다.


저장을 한 뒤에 더블클릭 해서 레지스트리에 추가해준다.


탐색기 등에서 dll,ocx파일 선택 후 마우스 오른쪽 버튼을 누르면 '레지스트리등록/레지스트리등록해제' 

메뉴가 보인다.


* 제거하는 reg파일 만드는 방법..

원하는 키값 앞에 - 만 붙이면 된다.

 

REGEDIT4

[-HKEY_CLASSES_ROOT\dllfile\shell]

[-HKEY_CLASSES_ROOT\ocxfile\shell]

 

이런식으로....



3. 프로그램으로 구현하기


* dll에서 함수포인터 얻어서 처리

regsvr32라는 프로그램은 dll내부의 DllRegisterServer() 함수 포인터만 받아서 호출해주는 역할만 하는거 같다.

 

LoadLibrary

GetProcAddress( "DllRegisterServer" );

Func();

FreeLibrary

 

LoadLibrary로 dll, ocx, ax다 된다.

DllRegisterServer 하면 자기 자신을 레지스트리에 등록하고

DllUnregisterServer는 등록된 정보를 삭제하는 기능을 한다.

regsvr32도 인스톨쉴드도 dll이나 ocx, ax를 등록할때 LoadLibrary로 로드해서 이 함수들을 호출한다.


이 방법이 아니라면

이 dll, ocx, ax파일이 등록될때 기록하는 레지스트리 경로나 값들을 모두 조사한 다음에 직접 써 주면 되겠다.


* 프로그램 실행 되어 있을때(ocx사용) mfc 다이얼로그에서 위 코드로 DllUnregisterServer를 호출하고

FreeLibrary시 프로그램이 죽는 현상을 발견했다;

ocx문제일까? -> 리소스 해제를 잘못하면 죽기도 한다는데;

거래 업체 dll이용해서 ocx만들고 웹에 올려본적 있는데 창을 닫으면 익스플로러 전체가 죽었던 일이 있었다.

그 업체 dll이 개판이라 종료시 다이얼로그를 삭제를 안했다는걸 밝혀냈지만.. 초짜였던 본인은 activex로 할 수 있는 짓은 

별걸 다해봤었던거 같다 ㅡ.ㅡ;

 

* regsvr소스?

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=5478&ref=1876

 



4. 이미 있을껀 다있다 ㅡ.ㅡ;


1) RegSvrHelp

http://cobaltic5.tistory.com/entry/RegSvrHelp

이곳에 가면 RegSvrHelp라는 프로그램이 있다. 

설치하면 dll이 일반 dll인지 com인지 판단을 하여 context menu에 나타난다.

exe도 등록할수 있다.


* 본인 컴터에선 이상한 현상?이 있었다;;

편한 툴인데 아깝다;


2) RegSvrEx - An Enchanced COM Server Registration Utility

http://www.codeproject.com/KB/winsdk/regsvrex.aspx

codeproject에 소스가 공개되어 있다. 



regsvr32.exe 를 사용하여 ActiveX 컨트롤 등록시 주의점
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=3882&ref=1289


데브피아나 웹서핑으로 찾은 자료들을 정리한것입니다 ㅋ
위 사항에서 추가할 사항이나 수정사항 답글 부탁드립니다 ㅋㅋ


반응형