사용자 정의 설정파일 읽기




 cf). InstallShield 2008 사용

 InstallShield 에서 생성한 설치본으로 설치 시, 외부 파일로 부터 설치 정보를 읽어와 설치해야 되는 경우가 있다. 즉, 스크립트에서 해당 설정 파일의 내용을 읽어 설치하는 경우이다.
 InstallShield Proect 에서 지원하는 방법은 없는것 같다. 설정 파일을 ini 파일 대신 현재 추세(?)에 맞게 XML 파일을 사용하기로 한다. 


■ Script

 스크립트에서 파일을 읽을 수 있지만, InstallShield 에서 제공해주는 함수는 기능이 미약하고, 또 한 XML 파일 읽는 것은 더더욱 불편하다. 따라서 스크립트에서는 해당 설정 파일을 읽는 DLL 을 호출하기로 한다. 호출된 DLL 에서 해당 파일을 열고, XML 엘리먼트들을 파싱하여 설치 제어를 한다.

nDLLResult = XCopyFile("Config.xml",SUPPORTDIR,COMP_NORMAL);
if (nDLLResult != 0) then        
MessageBox(FormatMessage(nDLLResult), SEVERE);
abort;
endif;               

VarSave (SRCTARGETDIR);    
SRCDIR = SUPPORTDIR;

LaunchAppEx(szInstaller, "/Type " + SRCDIR, WAIT, SW_HIDE, nDLLResult); 
if (nDLLResult = 0) then        
abort;    
endif;            

VarRestore (SRCTARGETDIR);

 XCopyFile() 함수를 이용하여 설정 파일(위에선 Config.xml) 을 InstallShield 로 만든 설치 모듈이 사용하는 폴더에 복사 시킨다. XCopyFile() 함수에 대한 설명은 InstallShield 도움말을 참조하면 된다. 여기서 한가지 알 수 있는 것은 설치본 모듈이 실행되면 설치에 필요한 모든 파일들을 로컬 시스템의 임시 폴더에 압축을 풀어 복사한다. 그 후, setup.exe 모듈을 실행 시켜 설치 스크립트대로 설치를 진행한다. 임시 폴더는 시스템 마다 다르다. SUPPORTDIR 을 참조하면 임시 폴더 전체 경로를 얻을 수 있다. XCopyFile() 함수 동작이 실패 하면 리턴값으로 원인을 알려주는데 FormatMessage() 함수를 이용하면 문자열로 실패 이유를 알 수 있다. 

 LaunchAppEx() 함수로 설정 파일을 로드할 모듈을 실행 시킨다. 위 경우는 설정 파일의 경로를 실행 시킬 모듈의 매개변수로 전달해 주었다. 모듈에서는 매개변수를 읽어 설정 파일의 경로를 확인하고, 파일을 연다. 파일에서 설정들을 읽어와 설정 결과를 리턴값으로 리턴해 준다. 

 VarSave(SRCTARGETDIR) 는 변수들의 저장된 값을 임시로 저장하게 되어 VarRestore(SRCTARGETDIR) 함수를 호출하게 되면 원래 값으로 돌아가게 된다. (위 코드선 크게 의미가 없다.)


■ Remark

 InstallShield 2008 로 설치 모듈을 만들었을 경우 "Disk Image", "Log Files", "Package", "Report" 폴더가 생긴다. Disk Image 에서 여러개의 설치 모듈이 있는게 보이는데 그 위치에 설정 파일을 위치 시킨다. "Package" 폴더에는 하나의 설치 모듈이 생기는데 이 모듈과 같은 위치에 설치 파일을 위치 시켜도 설치 파일의 위치를 인식할 수 없다. 

Posted by six605
,