|
Posted on 2009-03-24 08:50 S.l.e!ep.¢% 阅读(1689) 评论(0) 编辑 收藏 引用 所属分类: InstallShield
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); 附加一篇不错的文章 - 曾经使用installshield制作的安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成。
曾经使用installshield制作的安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成。 -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #include "ifx.h"
-
-
-
-
-
-
-
-
-
-
-
-
- NUMBER volumeNum;
-
- prototype KERNEL32.GetVolumeInformation(BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);
-
- prototype GetVolumeSerial();
-
- 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);
-
-
- if (APIReturn) then
-
- volumeNum = lpVolumeSerialNumber ;
- if (volumeNum < 0) then
- volumeNum = 0 - volumeNum;
- endif;
-
-
- if (volumeNum > 2139999999 - 135792468) then
-
-
- volumeNum = volumeNum - volumeNum/100000000*100000000;
- endif;
-
- else
-
- volumeNum = 123456789;
-
- endif;
- end ;
- prototype getNumString();
- function getNumString()
- number numSpace;
- number numMen;
- string tmpString;
- begin
-
-
- numSpace = GetDiskSpaceEx("c:\\",KBYTES);
-
- 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;
-
-
-
- end;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
-
-
-
-
-
- GetVolumeSerial();
-
-
- 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;
-
-
-
-
-
- volumeNum = volumeNum + 135792468;
- NumToStr(localNum,volumeNum);
-
-
-
-
- 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:
-
- Dlg_SdWelcome:
- szTitle = "xxxx系统";
- szMsg = " 确定是否继续安装?继续请按【下一步(next)】";
- nResult = SdWelcome( szTitle, szMsg );
- if (nResult = BACK) goto Dlg_Start;
-
-
-
-
-
-
-
- Dlg_SdShowInfoList:
-
-
-
- szTitle = "系统本地编号";
- szMsg = "将下面的本地编号发送给权限授予机构,在接收到相应的注册码后,您将进行继续注册!";
- szField1 = "编号";
- svEdit1 = localNum;
-
-
- nResult = SdShowDlgEdit1(szTitle, szMsg,szField1, svEdit1);
-
- 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;
-
-
-
-
-
- LaunchAppAndWait("net","start mysql",WAIT);
-
-
-
-
-
-
-
- nResult = XCopyFile(SRCDIR + "\\sql.bat","c:\\xxx\\",EXCLUDE_SUBDIR);
- nResult = XCopyFile(SRCDIR + "\\init.sql","c:\\xxx\\",EXCLUDE_SUBDIR);
-
-
-
-
-
-
-
- if (LaunchAppAndWait("c:\\xxx\\sql.bat", " " + svEdit1 + " " + svEdit2 + " ",WAIT) < 0) then
- MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE);
- endif;
-
- 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_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 );
-
-
- nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
- ListDestroy(listStartCopy);
- if (nResult = BACK) goto Dlg_SdSelectFolder;
-
- SetStatusWindow(0, "");
- Enable(STATUSEX);
- StatusUpdate(ON, 100);
- return 0;
- end;
-
-
-
-
-
-
-
-
-
- function OnMoving()
- string szAppPath;
- begin
-
-
- szAppPath = TARGETDIR;
- RegDBSetItem(REGDB_APPPATH, szAppPath);
- RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);
- end;
-
- function OnEnd()
-
-
-
-
-
- begin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif",TARGETDIR,EXCLUDE_SUBDIR);
- XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg",TARGETDIR,EXCLUDE_SUBDIR);
- CreateDir(TARGETDIR ^ "resc\\");
- end;
-
-
-
-
-
-
-
-
-
-
- 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
|