`

installshield安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成

阅读更多
曾经使用installshield制作的安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成。
////////////////////////////////////////////////////////////////////////////////
//                                                                           
//  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)如下:

 

 

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


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics