installshield 安装jdk并配置环境变量

时间:2024-05-11 10:48:35

今天来通过installshield安装jdk以及配置环境变量,本质上是调用第三方安装程序。
首先将jdk的安装文件添加到我们的安装程序中

然后编写我们的脚本
选择BEHAVIOR AND LOGIC->InstallScript->Setup.Rul->After Move Data->OnFirstUIAfter,如图

OnFirstUIAfter脚本如下

点击查看代码
function OnFirstUIAfter()
    STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;
    NUMBER bOpt1, bOpt2;
begin
	Disable(STATUSEX);
	if (SYSINFO.bIsWow64) then //判断64位操作系统
		REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY ;
	endif;
	//安装jdk
	RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
	if (RegDBKeyExist ("SOFTWARE\\JavaSoft\\Java Development Kit\\1.8.0_191") < 0) then
		MessageBox("准备安装jdk",INFORMATION);
		LaunchAppAndWait (TARGETDIR^"third\\jdk-8u191-windows-x64.exe","", LAAW_OPTION_WAIT);
	else
		MessageBox("jdk已安装",INFORMATION);
	endif;
	bOpt1   = FALSE;
    bOpt2   = FALSE;    
    if ( BATCH_INSTALL ) then
    	SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
    else
	    SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );
	endif;
end;

之所以放在这里,是因为此时安装包里的文件已经移动到用户选择的或默认的安装地址里,可以通过TARGETDIR获取到安装路径,方便查找文件。

配置环境变量

点击查看代码
function OnFirstUIAfter()
    STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2,reg_jdk_key,svValue,environment_key,java_path,pathValue;
    NUMBER bOpt1, bOpt2,nvSize,nvType;
begin
	Disable(STATUSEX);
	
	bOpt1   = FALSE;
    bOpt2   = FALSE;   
    reg_jdk_key="SOFTWARE\\JavaSoft\\Java Development Kit\\1.8.0_191";
    environment_key="SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
    java_path="%JAVA_HOME%\\bin";
    //配置环境变量
   if (SYSINFO.bIsWow64) then //如果为64位操作系统
        REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY ;   //则为注册表操作进行64位特殊设置
    endif;
    //设置注册表根目录
	RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
	//判断是否存在jdk
	if(RegDBKeyExist(reg_jdk_key)=1)then
		//获取jdk安装目录成功
		if(RegDBGetKeyValueEx(reg_jdk_key,"JavaHome",nvType,svValue,nvSize)=0)then
			if(RegDBSetKeyValueEx(environment_key,"JAVA_HOME",REGDB_STRING,svValue,-1)=0)then
				//path添加jdk bin
				//获取path的值
				RegDBGetKeyValueEx(environment_key,"Path",nvType,pathValue,nvSize);
				pathValue=java_path+";"+pathValue;
				RegDBSetKeyValueEx(environment_key,"Path",REGDB_STRING,pathValue,-1);
			else
				MessageBox("JAVA_HOME创建失败",SEVERE);
			endif;
		endif;
	endif;
	
    if ( BATCH_INSTALL ) then
    	SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
    else
	    SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );
	endif;
end;

RegDBGetKeyValueEx(reg_jdk_key,"JavaHome",nvType,svValue,nvSize) 该方法是获取注册表中某一个值,返回0 或 <0的值。查询的值的数据放在svValue中,可以直接使用
RegDBSetKeyValueEx(environment_key,"Path",REGDB_STRING,pathValue,-1); 设置环境注册表中的值

参考文档
https://www.cnblogs.com/Cindy_weiwei/archive/2009/05/18/1459542.html