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 

posted @ 2014-04-07 23:51  thinksea  阅读(964)  评论(0编辑  收藏  举报