zoukankan      html  css  js  c++  java
  • installshield安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成

    C代码
    ////////////////////////////////////////////////////////////////////////////////  
    //                                                                             
    //  File Name: Setup.rul                                                    
    //                                                                             
    //  Description: InstallShield script                                         
    //                                                                             
    //  Comments: This script was generated based on the selections you made in  
    //            the Project Wizard.  Refer to the help topic entitled "Modify       
    //            the script that the Project Wizard generates" for information  
    //    on possible next steps.  
    //  
    /////////////////////////////////////////////an///////////////////////////////////  
     
    // Include header files  
         
    #include "ifx.h"  
         
    ////////////////////// string defines ////////////////////////////  
    //////////////////// installation declarations ///////////////////  
    // ----- DLL function prototypes -----  
     
        // your DLL function prototypes  
     
    // ---- script function prototypes -----  
     
        // your script function prototypes  
        // your global variables  
       
    NUMBER volumeNum;  
    //Before using the GetVolumeInformation API you will need to prototype it  
    prototype KERNEL32.GetVolumeInformation(BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);  
    //prototype for the custom InstallScript function  
    prototype GetVolumeSerial();  
    //function definition  
    function GetVolumeSerial()  
    STRING lpRootPathName;  
    STRING lpVolumeNameBuffer;  
    NUMBER nVolumeNameSize;  
    NUMBER lpVolumeSerialNumber;  
    NUMBER lpMaximumComponentLength;  
    NUMBER lpFileSystemFlags;  
    STRING lpFileSystemNameBuffer;  
    NUMBER nFileSystemNameSize;  
    BOOL APIReturn;  
    begin  
      lpRootPathName="d:\\";  
      nVolumeNameSize=60;  
      nFileSystemNameSize=60;  
      //APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,   lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);  
      APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,   lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);  
       
       
      if (APIReturn) then          
       
       volumeNum = lpVolumeSerialNumber ;   
       if (volumeNum < 0) then  
        volumeNum = 0 - volumeNum;  
       endif;       
       //NumToStr(volumeNum,lpVolumeSerialNumber);  
        //SprintfBox(INFORMATION, "", "Volume= %s\nVolume Serial= %d", lpRootPathName, lpVolumeSerialNumber);  
       if (volumeNum > 2139999999 - 135792468) then         
       
        //volumeNum = 123456789;  
        volumeNum = volumeNum - volumeNum/100000000*100000000;  
       endif;       
         
      else                      
       
         volumeNum = 123456789;  
        //MessageBox("Failure.",0);  
      endif;  
    end ;  
    prototype getNumString();  
    function getNumString()  
      number numSpace;  
      number numMen;  
      string tmpString;  
    begin                                          
         //tmpNum = GetWindowHandle(HWND_INSTALL);  //安装主窗口的句柄   
         //numSpace = GetDiskSpace("c:\\"); //指定驱动器上的空闲磁盘空间   
         numSpace = GetDiskSpaceEx("c:\\",KBYTES); //指定驱动器上的空闲磁盘空间        BYTES   
         //numMen = GetMemFree();  //运行在Microsoft Windows下的一个应用程序可用的内存大小      
         numMen = GetDiskSpaceEx("d:\\",KBYTES);  
         if numSpace < 10000 then  
            numSpace = 11360000;  
         else 
          numSpace = (numSpace - numSpace/10000*10000)*10000;  
         endif;  
         if numMen < 10000 then  
            numMen = 7521;    
         else 
          numMen = numMen - numMen/10000*10000;  
         endif;                                                    
         volumeNum = 100000000 + numSpace + numMen;   
          
         //NumToStr(tmpString,volumeNum);       
        // MessageBox(tmpString,0);                              
    end;    
       
       
       
    //////////////////////////////////////////////////////////////////////////////  
    //                                                                            
    //  FUNCTION:   OnFirstUIBefore                                             
    //                                                                            
    //  EVENT:      FirstUIBefore event is sent when installation is run for the first  
    //              time on given machine. In the handler installation usually displays  
    //              UI allowing end user to specify installation parameters. After this  
    //              function returns, ComponentTransferData is called to perform file  
    //              transfer.  
    //                                                                            
    ///////////////////////////////////////////////////////////////////////////////  
    function OnFirstUIBefore()  
        number  nResult,nSetupType;  
        string  szTitle, szMsg;  
        string  szLicenseFile, szQuestion;  
        string  szName, szCompany, szSerial;  
        string  szFile;  
        string  szTargetPath;  
        string  szDir;  
        string  szfolder;  
        string  szComponents, szTargetdir;  
        number  nLevel;  
        LIST    listStartCopy;  
        LIST    list;  
        number  nvSize;      
         
        string szField1, svEdit1,szField2, svEdit2;  
                           
        string localNum;    
        number tmpNum;       
        string tmpCheckString;  
        string checkString;  
    begin   
        // TO DO: if you want to enable background, window title, and caption bar title                                                                      
        // SetTitle( @TITLE_MAIN, 24, WHITE );                                         
        // SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );                      
        // Enable( FULLWINDOWMODE );          
        // Enable( BACKGROUND );          
        // SetColor(BACKGROUND,RGB (0, 128, 128));         
                
        GetVolumeSerial();                      
        //getNumString();  
         
        tmpNum =  volumeNum;               
        tmpNum = tmpNum - tmpNum / 100 * 100;    
        NumToStr(tmpCheckString,tmpNum);      
        if (tmpCheckString == "0") then  
          tmpCheckString = "0X";  
        endif;  
        checkString = "B" + tmpCheckString + "_";       
         
        tmpNum =  volumeNum / 100;               
        tmpNum = tmpNum - tmpNum / 100 * 100;    
        NumToStr(tmpCheckString,tmpNum);     
        if (tmpCheckString == "0") then  
          tmpCheckString = "0X";  
        endif;  
        checkString = checkString + "K" + tmpCheckString + "_";  
         
        tmpNum =  volumeNum / 10000;               
        tmpNum = tmpNum - tmpNum / 100 * 100;    
        NumToStr(tmpCheckString,tmpNum);    
        if (tmpCheckString == "0") then  
          tmpCheckString = "0X";  
        endif;  
        checkString = checkString + "X" + tmpCheckString + "_";  
         
        tmpNum =  volumeNum / 1000000;               
        tmpNum = tmpNum - tmpNum / 100 * 100;    
        NumToStr(tmpCheckString,tmpNum);  
        if (tmpCheckString == "0") then  
          tmpCheckString = "0X";  
        endif;   
        checkString = checkString + "T" + tmpCheckString;  
                                                         
        //MessageBox(checkString,INFORMATION);   
            
        //变换volumeNum的值  
        //B3242_K423_X342_T3423     
        volumeNum = volumeNum + 135792468;             
        NumToStr(localNum,volumeNum);                                                     
        //MessageBox(localNum,INFORMATION);  
         
                              
        //copy images                                                                                                                                   
       nResult = XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif", "c:\\xxx\\icons\\media\\",EXCLUDE_SUBDIR);                                                                                                   
       nResult = XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg", "c:\\xxx\\icons\\teacher\\",EXCLUDE_SUBDIR);     
       CreateDir("c:\\xxx\\resc\\");                        
              
       if (nResult != 0) then         
             MessageBox ("图片拷贝出错!", SEVERE);  
       endif;  
     
        nSetupType = TYPICAL;   
        TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;   
        szDir = TARGETDIR;  
        SHELL_OBJECT_FOLDER = @FOLDER_NAME;  
        szName    = "";  
        szCompany = "";  
        szSerial = "";  
    Dlg_Start:  
        // beginning of dialogs label  
    Dlg_SdWelcome:  
        szTitle = "xxxx系统";  
        szMsg   = "  确定是否继续安装?继续请按【下一步(next)】";  
        nResult = SdWelcome( szTitle, szMsg );  
        if (nResult = BACK) goto Dlg_Start;  
    //Dlg_SdLicense:  
    //    szLicenseFile = SUPPORTDIR ^ "license.txt";  
    //    szTitle    = "xxxx系统";  
    //    szMsg      = "许可协议";  
    //    szQuestion = "您是否接受该协议?接受请按【是(Yes)】。继续安装必须接受该协议。";  
    //    nResult    = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );  
    //    if (nResult = BACK) goto Dlg_SdWelcome;  
    Dlg_SdShowInfoList:       
        //szFile = SUPPORTDIR ^ "infolist.txt";  
        //list = ListCreate( STRINGLIST );  
        //ListReadFromFile( list, szFile );  
        szTitle = "系统本地编号";  
        szMsg    = "将下面的本地编号发送给权限授予机构,在接收到相应的注册码后,您将进行继续注册!";       
        szField1 = "编号";  
        svEdit1 = localNum;  
        //nResult  = SdShowInfoList( szTitle, szMsg, list );   
        //ListDestroy( list );      
        nResult = SdShowDlgEdit1(szTitle, szMsg,szField1, svEdit1);         
        //if (nResult = BACK) goto Dlg_SdLicense;  
        if (nResult = BACK) goto Dlg_SdWelcome;  
    Dlg_SdRegisterUserEx:  
        szMsg   = "请输入:用户名、公司名和注册号";  
        szTitle = "xxxx系统";        
        nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial );  
        if (nResult = BACK) goto Dlg_SdShowInfoList;  
        if (szSerial != checkString)  then       
            MessageBox( "注册码输入错误!", SEVERE);  
           goto Dlg_SdRegisterUserEx;      
        endif;  
                            
    Dlg_SdShowDlgEdit2:  
        szTitle = "数据库信息";  
        szMsg    = "请输入数据库用户名和数据库密码:";        
        szField1 = "用户名";  
        szField2 = "密码";  
        svEdit1 = "root";  
        svEdit2 = "password";       
        nResult = SdShowDlgEdit2(szTitle, szMsg,szField1,szField2, svEdit1,svEdit2);   
        if (nResult = BACK) goto Dlg_SdRegisterUserEx;  
     //SdShowMsg ("下面进行数据库初始化操作,请勿手动关闭弹出窗口!", TRUE);  
     //Delay(2);  
       
         
       //启动mysql                                   
       LaunchAppAndWait("net","start mysql",WAIT);  
       //LaunchAppAndWait("net","stop mysql",WAIT);   
       //LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe"," -uroot -ppassword<" + SRCDIR ^ "test.sql",NOWAIT);  
      // LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe"," -h localhost  -u root   -p password<" + SRCDIR ^ "test.sql",WAIT) ;  
       //LaunchApp(WINDIR ^ "Notepad.exe",SRCDIR ^ "init.sql");   
       //LaunchAppAndWait(SRCDIR ^ "sql.bat"," root password ",WAIT);   
       ///LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe ","mysql  -uroot -ppassword<" + SRCDIR ^ "test.sql",NOWAIT);  
                                                                                 
        nResult = XCopyFile(SRCDIR + "\\sql.bat","c:\\xxx\\",EXCLUDE_SUBDIR);     
        nResult = XCopyFile(SRCDIR + "\\init.sql","c:\\xxx\\",EXCLUDE_SUBDIR);      
     //if (LaunchAppAndWait(SRCDIR + "\\sql.bat", " root password",WAIT) < 0) then  
      //MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE);  
     //endif;            
                                                
     //NumToStr(tmpCheckString,LaunchAppAndWait("c:\\xxx\\sql.bat", " root password",WAIT));                                                              
     //MessageBox(tmpCheckString,SEVERE);      
       
     if (LaunchAppAndWait("c:\\xxx\\sql.bat", " " + svEdit1 + " " + svEdit2 + " ",WAIT) < 0) then  
      MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE);  
     endif;    
        //DeleteDir("c:\\xxx\\",ALLCONTENTS); //删除这个临时目录           
        DeleteFile("c:\\xxx\\sql.bat");  
        DeleteFile("c:\\xxx\\init.sql");  
         
         
         
    Dlg_SdAskDestPath:  
        szTitle = "xxxx系统";  
        szMsg   = "请选择安装目录";  
        nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );  
        TARGETDIR = szDir;                                  
        //if (nResult = BACK) goto Dlg_SdRegisterUserEx;  
        if (nResult = BACK) goto Dlg_SdShowDlgEdit2;  
       
    Dlg_SetupType:    
        szTitle    = "xxxx系统";  
        szMsg      =  "请选择安装类型";  
        nResult = SetupType ( szTitle , szMsg , "" , nSetupType , 0 );  
        if (nResult = BACK) then  
            goto Dlg_SdAskDestPath;  
        else 
            nSetupType = nResult;  
            if (nSetupType != CUSTOM) then  
            szTargetPath = TARGETDIR;  
            nvSize = 0;  
            ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);  
            if (nvSize != 0) then       
                    MessageBox( szSdStr_NotEnoughSpace, WARNING );  
                goto Dlg_SetupType;  
                endif;  
            endif;    
        endif;  
    Dlg_SdComponentTree:  
        if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;  
        szTitle    = "xxxx系统";  
        szMsg      = "";  
        szTargetdir = TARGETDIR;  
        szComponents = "";  
        nLevel = 2;  
        if (nSetupType = CUSTOM) then  
          nResult = SdComponentTree(szTitle, szMsg, szTargetdir, szComponents, nLevel);  
          if (nResult = BACK) goto Dlg_SetupType;   
        endif;  
    Dlg_ObjDialogs:  
        nResult = ShowObjWizardPages(nResult);  
        if (nResult = BACK) goto Dlg_SdComponentTree;  
         
    Dlg_SdSelectFolder:  
        szfolder = SHELL_OBJECT_FOLDER;  
        szTitle    = "xxxx系统";  
        szMsg      = "";  
        nResult    = SdSelectFolder( szTitle, szMsg, szfolder );  
        SHELL_OBJECT_FOLDER = szfolder;  
        if (nResult = BACK) goto Dlg_ObjDialogs;  
       
    Dlg_SdStartCopy:  
        szTitle = "xxxx系统";  
        szMsg   = "安装信息收集完毕,并且获得安装权限,下一步将进行文件拷贝。";  
        listStartCopy = ListCreate( STRINGLIST );  
        //The following is an example of how to add a string(szName) to a list(listStartCopy).  
        //eg. ListAddString(listStartCopy,szName,AFTER);  
        nResult = SdStartCopy( szTitle, szMsg, listStartCopy );   
        ListDestroy(listStartCopy);  
        if (nResult = BACK) goto Dlg_SdSelectFolder;  
        // setup default status  
        SetStatusWindow(0, "");  
        Enable(STATUSEX);  
        StatusUpdate(ON, 100);  
        return 0;  
    end;  
    ///////////////////////////////////////////////////////////////////////////////  
    //  
    //  FUNCTION:   OnMoving  
    //  
    //  EVENT:      Moving event is sent when file transfer is started as a result of  
    //              ComponentTransferData call, before any file transfer operations  
    //              are performed.  
    //  
    ///////////////////////////////////////////////////////////////////////////////  
    function OnMoving()  
        string szAppPath;  
    begin  
        // Set LOGO Compliance Application Path  
        // TO DO : if your application .exe is in a subfolder of TARGETDIR then add subfolder  
        szAppPath = TARGETDIR;  
        RegDBSetItem(REGDB_APPPATH, szAppPath);  
        RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);  
    end;  
    // --- include script file section ---  
    function OnEnd()                                      
    // //string  java_home, catalina_home, szKey, szEnv;  
    // string  szKey, szEnv, svClassPath;        
    // string icon_dir, xml_dir,output_dir;  
    // number nRegSize;  
    // pointer pEnv;  
    begin                
    //         
    //   //catalina_home=TARGETDIR + "\\tomcat5.0.30";  
    //   //java_home=TARGETDIR + "\\j2sdk1.4.2_10";     
    //   szKey="Environment";  
    //   RegDBSetDefaultRoot(HKEY_CURRENT_USER);     
    //   //RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1);  
    //   //RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1);  
    //    
    //   //RegDBSetKeyValueEx(szKey,"CLASSPATH",REGDB_STRING,svClassPath,nRegSize);     
    //   GetEnvVar ("CLASSPATH", svClassPath);  
    //   //MessageBox(svClassPath,0);  
    //   svClassPath = svClassPath + "; " + "c:\\xxx\\resc";      
    //   //MessageBox(svClassPath,0);  
    //   RegDBSetKeyValueEx(szKey,"CLASSPATH",REGDB_STRING,svClassPath,-1)   ;  
    //   szEnv = "Environment";  
    //   pEnv = &szEnv;   
    //   //pEnv = AddressString(szEnv);    
    //   SendMessage(0xffff, 0x001A , 0, pEnv );  
    //    
    //   //MessageBox("sssss",0);    
     
                                                     
       XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif",TARGETDIR,EXCLUDE_SUBDIR);   
       XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg",TARGETDIR,EXCLUDE_SUBDIR);    
       CreateDir(TARGETDIR ^ "resc\\");     
    end;  
     
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
    ////////////////////////////////////////////////////////////////下面是一些设定tomcat或者jdk的环境变量的代码/////////////非本系统/////////////////  
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
    function OnEnd()      
    string  java_home, catalina_home, szKey, szEnv;        
    string icon_dir, xml_dir,output_dir;  
    POINTER pEnv;  
    begin                
      catalina_home=TARGETDIR + "\\tomcat5.0.30";  
      java_home=TARGETDIR + "\\j2sdk1.4.2_10";     
      szKey="Environment";  
      RegDBSetDefaultRoot(HKEY_CURRENT_USER);     
      RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1);  
      RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1);  
      szEnv = "Environment";  
      pEnv = &szEnv;  
      SendMessage (0xffff, 0x001A , 0, pEnv );  

    ////////////////////////////////////////////////////////////////////////////////
    //                                                                          
    //  File Name: Setup.rul                                                 
    //                                                                          
    //  Description: InstallShield script                                      
    //                                                                          
    //  Comments: This script was generated based on the selections you made in
    //            the Project Wizard.  Refer to the help topic entitled "Modify    
    //            the script that the Project Wizard generates" for information
    //    on possible next steps.
    //
    /////////////////////////////////////////////an///////////////////////////////////

    // Include header files
      
    #include "ifx.h"
      
    ////////////////////// string defines ////////////////////////////
    //////////////////// installation declarations ///////////////////
    // ----- DLL function prototypes -----

        // your DLL function prototypes

    // ---- script function prototypes -----

        // your script function prototypes
        // your global variables
     
    NUMBER volumeNum;
    //Before using the GetVolumeInformation API you will need to prototype it
    prototype KERNEL32.GetVolumeInformation(BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);
    //prototype for the custom InstallScript function
    prototype GetVolumeSerial();
    //function definition
    function GetVolumeSerial()
    STRING lpRootPathName;
    STRING lpVolumeNameBuffer;
    NUMBER nVolumeNameSize;
    NUMBER lpVolumeSerialNumber;
    NUMBER lpMaximumComponentLength;
    NUMBER lpFileSystemFlags;
    STRING lpFileSystemNameBuffer;
    NUMBER nFileSystemNameSize;
    BOOL APIReturn;
    begin
      lpRootPathName="d:\\";
      nVolumeNameSize=60;
      nFileSystemNameSize=60;
      //APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,   lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
      APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,   lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
     
     
      if (APIReturn) then       
     
       volumeNum = lpVolumeSerialNumber ;
       if (volumeNum < 0) then
        volumeNum = 0 - volumeNum;
       endif;    
       //NumToStr(volumeNum,lpVolumeSerialNumber);
        //SprintfBox(INFORMATION, "", "Volume= %s\nVolume Serial= %d", lpRootPathName, lpVolumeSerialNumber);
       if (volumeNum > 2139999999 - 135792468) then      
     
        //volumeNum = 123456789;
        volumeNum = volumeNum - volumeNum/100000000*100000000;
       endif;    
      
      else                   
     
         volumeNum = 123456789;
        //MessageBox("Failure.",0);
      endif;
    end ;
    prototype getNumString();
    function getNumString()
      number numSpace;
      number numMen;
      string tmpString;
    begin                                       
         //tmpNum = GetWindowHandle(HWND_INSTALL);  //安装主窗口的句柄
         //numSpace = GetDiskSpace("c:\\"); //指定驱动器上的空闲磁盘空间
         numSpace = GetDiskSpaceEx("c:\\",KBYTES); //指定驱动器上的空闲磁盘空间        BYTES
         //numMen = GetMemFree();  //运行在Microsoft Windows下的一个应用程序可用的内存大小   
         numMen = GetDiskSpaceEx("d:\\",KBYTES);
         if numSpace < 10000 then
            numSpace = 11360000;
         else
          numSpace = (numSpace - numSpace/10000*10000)*10000;
         endif;
         if numMen < 10000 then
            numMen = 7521; 
         else
          numMen = numMen - numMen/10000*10000;
         endif;                                                 
         volumeNum = 100000000 + numSpace + numMen;
       
         //NumToStr(tmpString,volumeNum);    
        // MessageBox(tmpString,0);                           
    end; 

    //////////////////////////////////////////////////////////////////////////////
    //                                                                         
    //  FUNCTION:   OnFirstUIBefore                                          
    //                                                                         
    //  EVENT:      FirstUIBefore event is sent when installation is run for the first
    //              time on given machine. In the handler installation usually displays
    //              UI allowing end user to specify installation parameters. After this
    //              function returns, ComponentTransferData is called to perform file
    //              transfer.
    //                                                                         
    ///////////////////////////////////////////////////////////////////////////////
    function OnFirstUIBefore()
        number  nResult,nSetupType;
        string  szTitle, szMsg;
        string  szLicenseFile, szQuestion;
        string  szName, szCompany, szSerial;
        string  szFile;
        string  szTargetPath;
        string  szDir;
        string  szfolder;
        string  szComponents, szTargetdir;
        number  nLevel;
        LIST    listStartCopy;
        LIST    list;
        number  nvSize;   
      
        string szField1, svEdit1,szField2, svEdit2;
                        
        string localNum; 
        number tmpNum;    
        string tmpCheckString;
        string checkString;
    begin
        // TO DO: if you want to enable background, window title, and caption bar title                                                                   
        // SetTitle( @TITLE_MAIN, 24, WHITE );                                      
        // SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );                   
        // Enable( FULLWINDOWMODE );       
        // Enable( BACKGROUND );       
        // SetColor(BACKGROUND,RGB (0, 128, 128));      
             
        GetVolumeSerial();                   
        //getNumString();
      
        tmpNum =  volumeNum;            
        tmpNum = tmpNum - tmpNum / 100 * 100; 
        NumToStr(tmpCheckString,tmpNum);   
        if (tmpCheckString == "0") then
          tmpCheckString = "0X";
        endif;
        checkString = "B" + tmpCheckString + "_";    
      
        tmpNum =  volumeNum / 100;            
        tmpNum = tmpNum - tmpNum / 100 * 100; 
        NumToStr(tmpCheckString,tmpNum);  
        if (tmpCheckString == "0") then
          tmpCheckString = "0X";
        endif;
        checkString = checkString + "K" + tmpCheckString + "_";
      
        tmpNum =  volumeNum / 10000;            
        tmpNum = tmpNum - tmpNum / 100 * 100; 
        NumToStr(tmpCheckString,tmpNum); 
        if (tmpCheckString == "0") then
          tmpCheckString = "0X";
        endif;
        checkString = checkString + "X" + tmpCheckString + "_";
      
        tmpNum =  volumeNum / 1000000;            
        tmpNum = tmpNum - tmpNum / 100 * 100; 
        NumToStr(tmpCheckString,tmpNum);
        if (tmpCheckString == "0") then
          tmpCheckString = "0X";
        endif;
        checkString = checkString + "T" + tmpCheckString;
                                                      
        //MessageBox(checkString,INFORMATION);
         
        //变换volumeNum的值
        //B3242_K423_X342_T3423  
        volumeNum = volumeNum + 135792468;          
        NumToStr(localNum,volumeNum);                                                  
        //MessageBox(localNum,INFORMATION);
      
                           
        //copy images                                                                                                                                
       nResult = XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif", "c:\\xxx\\icons\\media\\",EXCLUDE_SUBDIR);                                                                                                
       nResult = XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg", "c:\\xxx\\icons\\teacher\\",EXCLUDE_SUBDIR);  
       CreateDir("c:\\xxx\\resc\\");                     
           
       if (nResult != 0) then      
             MessageBox ("图片拷贝出错!", SEVERE);
       endif;
      
        nSetupType = TYPICAL;
        TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;
        szDir = TARGETDIR;
        SHELL_OBJECT_FOLDER = @FOLDER_NAME;
        szName    = "";
        szCompany = "";
        szSerial = "";
    Dlg_Start:
        // beginning of dialogs label
    Dlg_SdWelcome:
        szTitle = "xxxx系统";
        szMsg   = "  确定是否继续安装?继续请按【下一步(next)】";
        nResult = SdWelcome( szTitle, szMsg );
        if (nResult = BACK) goto Dlg_Start;
    //Dlg_SdLicense:
    //    szLicenseFile = SUPPORTDIR ^ "license.txt";
    //    szTitle    = "xxxx系统";
    //    szMsg      = "许可协议";
    //    szQuestion = "您是否接受该协议?接受请按【是(Yes)】。继续安装必须接受该协议。";
    //    nResult    = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );
    //    if (nResult = BACK) goto Dlg_SdWelcome;
    Dlg_SdShowInfoList:    
        //szFile = SUPPORTDIR ^ "infolist.txt";
        //list = ListCreate( STRINGLIST );
        //ListReadFromFile( list, szFile );
        szTitle = "系统本地编号";
        szMsg    = "将下面的本地编号发送给权限授予机构,在接收到相应的注册码后,您将进行继续注册!";    
        szField1 = "编号";
        svEdit1 = localNum;
        //nResult  = SdShowInfoList( szTitle, szMsg, list );
        //ListDestroy( list );   
        nResult = SdShowDlgEdit1(szTitle, szMsg,szField1, svEdit1);      
        //if (nResult = BACK) goto Dlg_SdLicense;
        if (nResult = BACK) goto Dlg_SdWelcome;
    Dlg_SdRegisterUserEx:
        szMsg   = "请输入:用户名、公司名和注册号";
        szTitle = "xxxx系统";     
        nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial );
        if (nResult = BACK) goto Dlg_SdShowInfoList;
        if (szSerial != checkString)  then    
            MessageBox( "注册码输入错误!", SEVERE);
           goto Dlg_SdRegisterUserEx;   
        endif;
                         
    Dlg_SdShowDlgEdit2:
        szTitle = "数据库信息";
        szMsg    = "请输入数据库用户名和数据库密码:";     
        szField1 = "用户名";
        szField2 = "密码";
        svEdit1 = "root";
        svEdit2 = "password";    
        nResult = SdShowDlgEdit2(szTitle, szMsg,szField1,szField2, svEdit1,svEdit2);
        if (nResult = BACK) goto Dlg_SdRegisterUserEx;
     //SdShowMsg ("下面进行数据库初始化操作,请勿手动关闭弹出窗口!", TRUE);
     //Delay(2);
     
      
       //启动mysql                                
       LaunchAppAndWait("net","start mysql",WAIT);
       //LaunchAppAndWait("net","stop mysql",WAIT);
       //LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe"," -uroot -ppassword<" + SRCDIR ^ "test.sql",NOWAIT);
      // LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe"," -h localhost  -u root   -p password<" + SRCDIR ^ "test.sql",WAIT) ;
       //LaunchApp(WINDIR ^ "Notepad.exe",SRCDIR ^ "init.sql");
       //LaunchAppAndWait(SRCDIR ^ "sql.bat"," root password ",WAIT);
       ///LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe ","mysql  -uroot -ppassword<" + SRCDIR ^ "test.sql",NOWAIT);
                                                                              
        nResult = XCopyFile(SRCDIR + "\\sql.bat","c:\\xxx\\",EXCLUDE_SUBDIR);  
        nResult = XCopyFile(SRCDIR + "\\init.sql","c:\\xxx\\",EXCLUDE_SUBDIR);   
     //if (LaunchAppAndWait(SRCDIR + "\\sql.bat", " root password",WAIT) < 0) then
      //MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE);
     //endif;         
                                             
     //NumToStr(tmpCheckString,LaunchAppAndWait("c:\\xxx\\sql.bat", " root password",WAIT));                                                           
     //MessageBox(tmpCheckString,SEVERE);   
     
     if (LaunchAppAndWait("c:\\xxx\\sql.bat", " " + svEdit1 + " " + svEdit2 + " ",WAIT) < 0) then
      MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE);
     endif; 
        //DeleteDir("c:\\xxx\\",ALLCONTENTS); //删除这个临时目录        
        DeleteFile("c:\\xxx\\sql.bat");
        DeleteFile("c:\\xxx\\init.sql");

    Dlg_SdAskDestPath:
        szTitle = "xxxx系统";
        szMsg   = "请选择安装目录";
        nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
        TARGETDIR = szDir;                               
        //if (nResult = BACK) goto Dlg_SdRegisterUserEx;
        if (nResult = BACK) goto Dlg_SdShowDlgEdit2;
     
    Dlg_SetupType: 
        szTitle    = "xxxx系统";
        szMsg      =  "请选择安装类型";
        nResult = SetupType ( szTitle , szMsg , "" , nSetupType , 0 );
        if (nResult = BACK) then
            goto Dlg_SdAskDestPath;
        else
            nSetupType = nResult;
            if (nSetupType != CUSTOM) then
            szTargetPath = TARGETDIR;
            nvSize = 0;
            ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);
            if (nvSize != 0) then    
                    MessageBox( szSdStr_NotEnoughSpace, WARNING );
                goto Dlg_SetupType;
                endif;
            endif; 
        endif;
    Dlg_SdComponentTree:
        if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;
        szTitle    = "xxxx系统";
        szMsg      = "";
        szTargetdir = TARGETDIR;
        szComponents = "";
        nLevel = 2;
        if (nSetupType = CUSTOM) then
          nResult = SdComponentTree(szTitle, szMsg, szTargetdir, szComponents, nLevel);
          if (nResult = BACK) goto Dlg_SetupType;
        endif;
    Dlg_ObjDialogs:
        nResult = ShowObjWizardPages(nResult);
        if (nResult = BACK) goto Dlg_SdComponentTree;
      
    Dlg_SdSelectFolder:
        szfolder = SHELL_OBJECT_FOLDER;
        szTitle    = "xxxx系统";
        szMsg      = "";
        nResult    = SdSelectFolder( szTitle, szMsg, szfolder );
        SHELL_OBJECT_FOLDER = szfolder;
        if (nResult = BACK) goto Dlg_ObjDialogs;
     
    Dlg_SdStartCopy:
        szTitle = "xxxx系统";
        szMsg   = "安装信息收集完毕,并且获得安装权限,下一步将进行文件拷贝。";
        listStartCopy = ListCreate( STRINGLIST );
        //The following is an example of how to add a string(szName) to a list(listStartCopy).
        //eg. ListAddString(listStartCopy,szName,AFTER);
        nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
        ListDestroy(listStartCopy);
        if (nResult = BACK) goto Dlg_SdSelectFolder;
        // setup default status
        SetStatusWindow(0, "");
        Enable(STATUSEX);
        StatusUpdate(ON, 100);
        return 0;
    end;
    ///////////////////////////////////////////////////////////////////////////////
    //
    //  FUNCTION:   OnMoving
    //
    //  EVENT:      Moving event is sent when file transfer is started as a result of
    //              ComponentTransferData call, before any file transfer operations
    //              are performed.
    //
    ///////////////////////////////////////////////////////////////////////////////
    function OnMoving()
        string szAppPath;
    begin
        // Set LOGO Compliance Application Path
        // TO DO : if your application .exe is in a subfolder of TARGETDIR then add subfolder
        szAppPath = TARGETDIR;
        RegDBSetItem(REGDB_APPPATH, szAppPath);
        RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);
    end;
    // --- include script file section ---
    function OnEnd()                                   
    // //string  java_home, catalina_home, szKey, szEnv;
    // string  szKey, szEnv, svClassPath;     
    // string icon_dir, xml_dir,output_dir;
    // number nRegSize;
    // pointer pEnv;
    begin             
    //      
    //   //catalina_home=TARGETDIR + "\\tomcat5.0.30";
    //   //java_home=TARGETDIR + "\\j2sdk1.4.2_10";  
    //   szKey="Environment";
    //   RegDBSetDefaultRoot(HKEY_CURRENT_USER);  
    //   //RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1);
    //   //RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1);
    // 
    //   //RegDBSetKeyValueEx(szKey,"CLASSPATH",REGDB_STRING,svClassPath,nRegSize);  
    //   GetEnvVar ("CLASSPATH", svClassPath);
    //   //MessageBox(svClassPath,0);
    //   svClassPath = svClassPath + "; " + "c:\\xxx\\resc";   
    //   //MessageBox(svClassPath,0);
    //   RegDBSetKeyValueEx(szKey,"CLASSPATH",REGDB_STRING,svClassPath,-1)   ;
    //   szEnv = "Environment";
    //   pEnv = &szEnv;
    //   //pEnv = AddressString(szEnv); 
    //   SendMessage(0xffff, 0x001A , 0, pEnv );
    // 
    //   //MessageBox("sssss",0); 

                                                  
       XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif",TARGETDIR,EXCLUDE_SUBDIR);
       XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg",TARGETDIR,EXCLUDE_SUBDIR); 
       CreateDir(TARGETDIR ^ "resc\\");  
    end;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////下面是一些设定tomcat或者jdk的环境变量的代码/////////////非本系统/////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function OnEnd()   
    string  java_home, catalina_home, szKey, szEnv;     
    string icon_dir, xml_dir,output_dir;
    POINTER pEnv;
    begin             
      catalina_home=TARGETDIR + "\\tomcat5.0.30";
      java_home=TARGETDIR + "\\j2sdk1.4.2_10";  
      szKey="Environment";
      RegDBSetDefaultRoot(HKEY_CURRENT_USER);  
      RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1);
      RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1);
      szEnv = "Environment";
      pEnv = &szEnv;
      SendMessage (0xffff, 0x001A , 0, pEnv );

     对应的 vb 注册码解码的核心程序(KeyGen.frm)如下:
    C代码
    VERSION 5.00  

    Begin VB.Form keyGen   
       Appearance      =   0  'Flat  
       BackColor       =   &H80000001&  
       BorderStyle     =   5  'Sizable ToolWindow  
       Caption         =   "**系统注册码生成器" 
       ClientHeight    =   1290  
       ClientLeft      =   60  
       ClientTop       =   330  
       ClientWidth     =   4545  
       DrawMode        =   1  'Blackness  
       FillStyle       =   0  'Solid  
       LinkTopic       =   "Form1" 
       MaxButton       =   0   'False  
       MinButton       =   0   'False  
       OLEDropMode     =   1  'Manual  
       ScaleHeight     =   1290  
       ScaleMode       =   0  'User  
       ScaleWidth      =   4545  
       ShowInTaskbar   =   0   'False  
       StartUpPosition =   1  '所有者中心  
       Begin VB.CommandButton genButton   
          Appearance      =   0  'Flat  
          BackColor       =   &H80000001&  
          Caption         =   "生成" 
          Height          =   300  
          Left            =   3480  
          MaskColor       =   &H80000001&  
          Style           =   1  'Graphical  
          TabIndex        =   4  
          Top             =   240  
          UseMaskColor    =   -1  'True  
          Width           =   615  
       End  
       Begin VB.TextBox snText   
          Appearance      =   0  'Flat  
          BackColor       =   &H80000001&  
          Height          =   300  
          Left            =   960  
          Locked          =   -1  'True  
          TabIndex        =   3  
          Top             =   720  
          Width           =   3135  
       End  
       Begin VB.TextBox machineText   
          Appearance      =   0  'Flat  
          BackColor       =   &H80000001&  
          Height          =   300  
          Left            =   960  
          TabIndex        =   2  
          Top             =   240  
          Width           =   2295  
       End  
       Begin VB.Label snLabel   
          Alignment       =   2  'Center  
          Appearance      =   0  'Flat  
          BackColor       =   &H80000001&  
          BackStyle       =   0  'Transparent  
          Caption         =   "注册码" 
          ForeColor       =   &H80000008&  
          Height          =   255  
          Left            =   240  
          TabIndex        =   1  
          Top             =   840  
          Width           =   735  
       End  
       Begin VB.Label machineLabel   
          Alignment       =   2  'Center  
          Appearance      =   0  'Flat  
          BackColor       =   &H80000001&  
          BackStyle       =   0  'Transparent  
          Caption         =   "机器码" 
          ForeColor       =   &H80000008&  
          Height          =   255  
          Left            =   240  
          TabIndex        =   0  
          Top             =   360  
          Width           =   735  
          WordWrap        =   -1  'True  
       End  
    End  
    Attribute VB_Name = "keyGen" 
    Attribute VB_GlobalNameSpace = False  
    Attribute VB_Creatable = False  
    Attribute VB_PredeclaredId = True  
    Attribute VB_Exposed = False  
     
     
    Private Sub genButton_Click()  
        Dim distNum As Double  
        Dim intTmp As Double  
        Dim mid As Long  
        Dim strSN As String  
          
          
        If (VBA.Trim(machineText) <> "") Then  
            If (IsNumeric(VBA.Trim(machineText)) And VBA.Trim(machineText) > 135792468 And VBA.Trim(machineText) < 2139999999) Then  
                distNum = machineText  
            Else  
                distNum = 123456789 + 135792468  
            End If  
            distNum = distNum - 135792468  
              
              
            strSN = "B" 
            intTmp = distNum  
            mid = intTmp - Fix(intTmp / 100) * 100  
            If mid = 0 Then  
                strSN = strSN + "0X" 
            Else  
                strSN = strSN + VBA.Trim(Str(mid))  
            End If  
            strSN = strSN + "_" 
              
              
            strSN = strSN + "K" 
            intTmp = Fix(intTmp / 100)  
            mid = intTmp - Fix(intTmp / 100) * 100  
            If mid = 0 Then  
                strSN = strSN + "0X" 
            Else  
                strSN = strSN + VBA.Trim(Str(mid))  
            End If  
            strSN = strSN + "_" 
              
              
            strSN = strSN + "X" 
            intTmp = Fix(intTmp / 100)  
            mid = intTmp - Fix(intTmp / 100) * 100  
            If mid = 0 Then  
                strSN = strSN + "0X" 
            Else  
                strSN = strSN + VBA.Trim(Str(mid))  
            End If  
            strSN = strSN + "_" 
              
              
            strSN = strSN + "T" 
            intTmp = Fix(intTmp / 100)  
            mid = intTmp - Fix(intTmp / 100) * 100  
            If mid = 0 Then  
                strSN = strSN + "0X" 
            Else  
                strSN = strSN + VBA.Trim(Str(mid))  
            End If  
              
            snText = strSN  
              
        End If  
    End Sub 

  • 相关阅读:
    Sql2000分页效率
    CSS笔记
    向模态窗体传递参数和获取返回值
    css 实现div 内容垂直居中
    轻量级的数据交换格式——初识Json
    CSS 绝对定位
    前台小模块CSS布局代码
    XML常用类(淘宝API)
    表单form
    js 分页
  • 原文地址:https://www.cnblogs.com/jhabb/p/1893487.html
Copyright © 2011-2022 走看看