使用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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章