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 @ 2010-12-01 15:37  落冰  阅读(1406)  评论(0编辑  收藏  举报