Data Type in InstallShield And Win32API Data Type
BOOL TRUE or FALSE
CHAR 8-bit 有符号字符
DWORD 同NUMBER
HWND 窗口句柄(内部类型是NUMBER)
INT 同NUMBER
LIST 指向InstallShield list的指针(内部类型是NUMBER)
LONG 同NUMBER
LPSTR 同POINTER
NUMBER 有符号4字节整数
POINTER 指向数据的指针(如int i;p=&i)
SHORT 同NUMBER
STRING 字符串
Call API For Example
prototype KERNEL32.GetVolumeInformation(BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);
附加一篇不错的文章
BOOL TRUE or FALSE
CHAR 8-bit 有符号字符
DWORD 同NUMBER
HWND 窗口句柄(内部类型是NUMBER)
INT 同NUMBER
LIST 指向InstallShield list的指针(内部类型是NUMBER)
LONG 同NUMBER
LPSTR 同POINTER
NUMBER 有符号4字节整数
POINTER 指向数据的指针(如int i;p=&i)
SHORT 同NUMBER
STRING 字符串
Call API For Example
prototype KERNEL32.GetVolumeInformation(BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);
附加一篇不错的文章
installshield安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成
- 曾经使用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 );
//////////////////////////////////////////////////////////////////////////////// // // 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
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