프로그램 설치 시, 레지스트리를 등록해야 하는데, 스크립트에서 호출하는 DLL에서 해줄까 하다가.. 간단한 거는 그냥 InstallShield 스크립트로 기록하고자 했다.

 InstallShield 2008 마법사(?!)를 최대한 활용하고자 했는데.. 내가 넘겨 받은 설치본은 무작정 스크립트로 때려 박은 코드였다. 아... 언제나 느끼는 거지만 대충 만들어서 나한테 떠넘길때 정말 짜증.. 넘길꺼면 좀 제대로 만들기나 하지!!

 
레지스트리 등록

스크립트로도 할 것이지만 Installation Designer 에서 레지스트리 키를 등록. 여기서 작업할 때 장점은, 레지스트리의 등록을 구조적으로 쉽게 보여주고, Uninstall 시 같이 삭제할 것인지도 설정할 수 있다.




스크립트 작성

레지스트리 키 및 값을 등록하는 함수를 작성했다. 
function CreateRegInstallDir()
STRING szKey; // 레지스트리 키 경로
STRING szAppKey; // App 레지스트리 키 경로
STRING szApp; // App 이름
STRING szInstallDir;        // InstallDir 값 이름
begin                                      
REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);          
szKey = "Software\\COMPANY\\AA\\BB";                     
szAppKey = "Software\\COMPANY\\AA\\BB\\Demo";
szApp = "Demo";                        
szInstallDir = "InstallDir";  
if (0 < RegDBKeyExist (szAppKey)) then 
RegDBCreateKeyEx(szKey, szApp);
endif;          
RegDBSetKeyValueEx(szAppKey, szInstallDir, REGDB_STRING, TARGETDIR, -1);  
REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY;
end; 


RegDBKeyExist() 함수를 이용하여 레지스트리 키가 있는지 검사한다. 없으면 RegDBCreateKeyEx() 함수를 이용하여 키를 생성한다. 값을 등록할때는 RegDBSetKeyValueEx() 함수를 이용한다. 마지막 파라미터로 기록할 값의 길이를 지정해 줘야 하는데 -1을 넘겨주면 알아서 계산해 준다. -1 파라미터를 사용할 수 있는 레지스트리 값 타입이 따로 있으니 조심.

각 함수는 도움말을 참조 하면 자세히 알 수 있다.





레지스트리 삭제
szKey = "Software\\App\\Data";
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);         
if (1 == RegDBKeyExist (szKey)) then
RegDBDeleteKey (szKey); 
endif;
Posted by six605
,