확장자가 ocx 인 파일을 사용하는 어플리케이션은 해당 어플리케이션을 설치할 때 ocx 파일을 시스템에 등록해주어야 한다. 이 작업이 일반적인 작업이라 InstallShield 에서 설정값만 변경하면 알아서 시스템에 등록해준다. 하지만 여러 언어의 OS에 설치해본 결과 등록될 때도, 등록되지 않을 때도 있다. 음 어떤 설정의 문제인지는 모르겠지만..


1. InstallShield 에서 OCX 파일 등록 설정



InstallShield 에서 Installation Designer → Organization → Components 로 등록할 경우, 해당 Component 프로퍼티에서 Self-Register 값을 Yes 로 하면 된다. 그러면 InstallShield가 어플리케이션을 설치하면서 해당 모듈을 자동으로 등록해 준다. 


2. 스크립트를 이용한 OCX 파일 수동 등록

 위와 같이 자동으로 등록하게 했는데 이상하게 등록이 안되는 경우가 있었다... 모든 경우를 대비하여 수동으로 등록하는 스크립트를 추가해 줬다. 

function OnEnd()
    string szProgram, szCmdLine;
begin
    szProgram = WINSYSDIR ^ "regsvr32.exe ";
    szCmdLine = TARGETDIR ^ "파일이름";
    //LongPathToShortPath (szCmdLine);
    LongPathToQuote (szCmdLine, TRUE);
    MessageBox(szCmdLine, INFORMATION);
    LaunchAppAndWait(szProgram, szCmdLine, WAIT/*LAAW_OPTION_CHANGEDIRECTORY |  LAAW_OPTION_FIXUP_PROGRAM /*LAAW_OPTION_WAIT*/); 
end;


 Windows 에서 ocx를 등록할때 regsvr32.exe 를 이용한다. 즉 Windows 실행창에서 다음과 같이 입력하여 수동으로 등록한다.
regsvr32 MyComponent.ocx
regsvr32.exe 는 Windows system 폴더에 있으므로 다음과 같이 전체 경로를 구해준다.
WINSYSDIR ^ "regsvr32.exe"; 

해당 경로로 실행시켜 주면 된다.

TARGETDIR 이 보통 "C:\Program Files" 하위에 위치하게되는데 이 값을 그냥 전달하게 되면 "C:\Program" 과 그 나머지 부분으로 짤려서 전달하게 되므로 원하는 대로 동작하지 않는다.  위의 스크립트에서 LongPathToQuote() 메소드가 이 부분을 보완해주는 함수 같긴 한데.. 아래와 같은 방법으로도 문자열이 짤리는 것을 막을 수 있다.

szOcx = "\"" + TARGETDIR ^ "MyComponent.ocx" + "\"";


Posted by six605
,