使用InstallShield打包java程序exe以及jdk,安装完成自动运行
???? 大家都知道java生成的exe如果没有jre是无法运行的,如果客户自己安装setup.exe以后自己配置java环境,那客户一定会骂你这个软件怎么这么差,呵呵。所以我今天要说的使用InstallShield打包将java exe jdk(或jre)一起打包安装,安装完成自动执行EXE.至于如何打包exe请参考我前面写的<使用Fat_jar和exe4J打包java应用程序为Exe文件>:http://suiyuan0808.iteye.com/blog/852231.我把我之前做的打包代码拷贝出来供大家参考。这段代码需要写到InstallShield工程的Setup.Rul里面去。下面语言有点像vb语言
?
/*
*author:Ldfu
*/
#include "ifx.h"
???
//开始安装时候会自动检查jdk环境并安装
function OnBegin()
begin
?Disable (BACKBUTTON);
????? if(!MAINTENANCE)then
???????? SdLicense2 ("License ", "", "", SUPPORTDIR ^ "sn.txt", FALSE);
????? endif ;??
??
? //如果大家的jdk和我的不一样请修改红色粗体部分即可。
? RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
?
//这里意思在注册表里面没有找到jdk注册信息,则安装jdk
? if (RegDBKeyExist ("SOFTWARE\\JavaSoft\\Java Development Kit\\1.6.0_04") < 0) then
???? if(LaunchAppAndWait (SUPPORTDIR^"jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe","", LAAW_OPTION_WAIT)<0)then
???????? MessageBox ("您的系统没有安装 JDK 1.6.0_04 t! ", INFORMATION);
???? endif;
? endif;
end;?
?
//安装结束之前,设置java_home环境变量
function OnEnd()
? STRING szFeatureName;
? STRING serviceTarget;
? STRING szDocFile;?
? STRING szKey;??
? NUMBER nvType;
? STRING svValue;
? NUMBER nvSize;
begin???
?
//检查是否已经安装jdk
?????????? szKey = "SOFTWARE\\JavaSoft\\Java Development Kit\\1.6.0_10";
?RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
?
//如果已经安装则设置环境变量 java_home
?if (RegDBKeyExist(szKey)=1) then//如果该注册表值存在
??? if(RegDBGetKeyValueEx(szKey,"JavaHome",nvType,svValue,nvSize)=0) then
????? szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
??????? if(RegDBSetKeyValueEx(szKey, "JAVA_HOME", REGDB_STRING, svValue, -1)<0) then
????????? MessageBox ("Javahome create failed, please set it manually!", SEVERE);
???????? endif;
??? endif;
?endif;
?
//最后启动您的exe文件
?? szFeatureName="main";
?? serviceTarget=TARGETDIR^"wangdianzhushou.exe";
? if (FeatureIsItemSelected(MEDIA, szFeatureName)=1) then
??????? if(FindFile(TARGETDIR, " wangdianzhushou.exe ", szDocFile)=0) then
???????????? if (LaunchApp (serviceTarget, "") < 0) then
???????????????? MessageBox ("无法启动程序 "+serviceTarget+".", SEVERE);
????????????? endif;
???????? endif;
?? endif;
?
end;