zoukankan      html  css  js  c++  java
  • InstallShield 实例(一)检测JDK,MYSQL,创建数据库

    需求:

      最近遇到一个项目,需要将web打包成exe安装程序,使用了很强大的Installshield工具。在这个打包过程中,需要完成一下几个事情:

      1、首先检测是否安装JDK和MySQL,如果没有则启动安装程序开始安装。

      2、启动MySql服务器,初始化数据库(建库,建表等)。

      3、复制完数据后,将jdk安装路径附到某个bat中,例如设置tomcat的startup.bat中的JAVA_HOME.。

      4、结束时,自动启动某个应用。

    在进行这个任务时,下面的几篇博客给了我很大帮助,希望大家可以看看,在此我也不做过多的重复介绍了。

    帮助最大的就是官方的Help了,写的真的很好,很仔细。

    http://www.cnblogs.com/Cindy_weiwei/archive/2009/05/18/1459542.html(很全,很好)

    http://chorfung.blog.163.com/blog/static/1207120002010320104717707/

        我用的是InstallShield2010破解版,WIN7。

      创建InstallScript MSI Project项目。

      打开Intallation Designer->Behavior and Logic->InstallScript。

      OnFirstUIBefore中显示出开始复制数据前的所有界面,可以进行相应的修改。

      1、在显示欢迎界面之前,判断JDK和MySql是否安装等。

      在此需要向Intallation Designer->Behavior and Logic->Support Files/Billboards下的Support Files 下的Language Independent下添加jdk和mysql的安装程序,在检测到没有的情况下,调用安装。代码中SUPPORTDIR则表示该文件夹的路径。

     if(!MAINTENANCE) then 
           RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);  
           //检测是否安装JDK   
           jdkkey="SOFTWARE\JavaSoft\Java Development Kit\1.6.0_05";
           if (RegDBKeyExist (jdkkey) < 0) then
                MessageBox ("系统检测到您没有安装JDK,系统将自动引导您安装好JDK环境", INFORMATION);
                 LaunchAppAndWait (SUPPORTDIR^"jdk-6u5-windows-i586-p.exe","", LAAW_OPTION_WAIT);
           endif;
           //检测是否安装MySql  
           mysqlkey="SOFTWARE\MySQL AB\MySQL Server 5.0"; 
           if(RegDBKeyExist(mysqlkey) < 0) then
                MessageBox("系统检测到您没有安装MySql,系统将自动引导您安装好MySql环境", INFORMATION);
                 LaunchAppAndWait (SUPPORTDIR^"mysql-5.0.96-win32.exe", "", LAAW_OPTION_WAIT);
           endif; 
         endif;
    检测jdk和mysql

      2、初始化MYSQL数据库

      增加一个让用户输入用户名密码的界面,用于导入sql脚本来创建数据库和表。

      主要思路就是用bat来导入SQL脚本来初始化数据库。在该程序中将ufbank.sql和ufbank.bat放到Support Files下,在安装过程中在C盘创建临时文件夹,将其复制到临时文件夹中,运行bat,执行sql脚本,然后根据生产的文件名判断是否执行成功,0.txt表示成功,1.txt表示失败。最后删除临时文件。

    //初始化MySql数据库
    Dlg_InitMySql:
        svEdit1="root";
        svEdit2=""; 
        nResult = EnterLoginInfo ( "请输入MYSQL数据库用户名和密码" , svEdit1 , svEdit2 );
        //nResult=SdShowDlgEdit2 ( "初始化数据库" , "请输入MYSQL数据库用户名和密码(留空则表示不初始化数据库)。" , "用户名" , "密  码" , svEdit1 ,svEdit2  );
        if(nResult=BACK) goto Dlg_SdWelcome; 
        if(svEdit1!="" & svEdit2!="") then
           //获取MYSQL安装路径 
           mysqlkey="SOFTWARE\MySQL AB\MySQL Server 5.0";
           mysqlpath="";  
           svSize=-1;   
           RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); 
           svType=REGDB_STRING;
           if(RegDBGetKeyValueEx(mysqlkey,"location",svType,mysqlpath,svSize)<0) then
                   MessageBox("MySQL安装路径提取失败",INFORMATION); 
                   goto Dlg_InitMySql;
           endif; 
            if(mysqlpath!="") then
                mysqlpath = mysqlpath+"bin\mysql";
            endif;
            //复制初始化数据库的临时文件到c盘根目录
            CreateDir("c:\UFBankDBtemp");
            CopyFile(SUPPORTDIR^"ufbank.sql","c:\UFBankDBtemp\ufbank.sql");
            CopyFile(SUPPORTDIR^"ufbank.bat","c:\UFBankDBtemp\ufbank.bat");   
            //启动MYSQL数据库
            szMsg="正在启动MYSQL服务,请稍等...";
            SdShowMsg(szMsg,TRUE);
            LaunchAppAndWait("net","start mysql",LAAW_OPTION_WAIT); 
            SdShowMsg(szMsg,FALSE);
            //开始执行SQL。
            szMsg="正在初始化数据库,请稍等...";
            SdShowMsg(szMsg,TRUE);
            ISsucc=LaunchAppAndWait("c:\UFBankDBtemp\ufbank.bat","""+ mysqlpath+"" ""+svEdit1+"" ""+svEdit2+""",LAAW_OPTION_WAIT);
            SdShowMsg(szMsg,FALSE);
            if(ISsucc<0) then
                MessageBox("数据库初始化失败,请确认您的数据库中已正确安装MYSQL",SEVERE);
                goto Dlg_InitMySql;
            else 
                FindFile("c:\UFBankDBtemp","*.txt",svResult);
                switch(svResult)
                    case "0.txt":
                    case "1.txt": 
                        MessageBox("用户名或密码有误,或者MYSQL安装不正确,请您重新确认。",SEVERE);   
                        goto Dlg_InitMySql;
                endswitch;
            endif;
            //删除初始化数据库的临时文件?
           DeleteDir("c:\UFBankDBtemp",ALLCONTENTS);   
       else 
          MessageBox("用户名和密码不能为空。",INFORMATION);
          goto Dlg_InitMySql;
       endif;  
    初始化MYSQL数据库
    CREATE DATABASE if not exists `dbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    use log
    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for `table1`
    -- ----------------------------
    CREATE TABLE if not exists `table1`(
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(10) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT ignore INTO `table1` VALUES ('1', 'name1');
    --ignore 关键字可以防止主键重复导致的报错信息
    sql脚本
    @echo off
    set path_bin_mysql=%1
    set user=%2
    set password=%3
    %path_bin_mysql% -u%user% -p%password% < ufbank.sql
    echo>%errorlevel%.txt
    bat脚本

      在Intallation Designer->Server Configuretion->SQL Script可以直接连库写SQL脚本,官方帮助和网上均有很多关于SQL Server数据库的介绍,这里的连库需要用到ODBC,SQLSERVER可以直接连接成功,但MYSQL就不可以了,需要配置ODBC等,我没有试,感兴趣的试试吧。

      3、将jdk安装路径写入到某个文件中。

    //获取JAVA_HOME安装路径 
       jdkkey="SOFTWARE\JavaSoft\Java Development Kit\1.6.0_05";
       JAVA_HOME=""; 
       if(RegDBGetKeyValueEx(jdkkey,"javahome",svType,JAVA_HOME,svSize)<0) then
               MessageBox("JDK安装路径提取失败",INFORMATION);
       endif; 
         
        //向BAT中设置javahome路径等信息  
        //startup.bat
        if (FindFile(TARGETDIR^"bin","startup.bat",svResult)=0) then         
          
     szInsertLine="set JAVA_HOME="+JAVA_HOME;
          
    FileInsertLine(TARGETDIR^"UFGOVBank\bin\startup.bat",szInsertLine,1,REPLACE);
        endif;  
    写入javahome

      4、最后启动某个应用,在OnEnd中利用LanuchAppAndWait函数实现。

  • 相关阅读:
    Python random模块下的常用函数小结
    MySQL 数据库连接
    LeetCode 376. 摆动序列 做题小结
    LeetCode 1005. K 次取反后最大化的数组和 做题小结
    LeetCode 455. 分发饼干 做题小结
    完美解决Python与anaconda之间的冲突问题
    LeetCode 122. 买卖股票的最佳时机 II 做题小结
    LeetCode 714. 买卖股票的最佳时机含手续费 做题小结
    如何去除有道云笔记广告(windows)
    baby web
  • 原文地址:https://www.cnblogs.com/ITinfo/p/4103683.html
Copyright © 2011-2022 走看看