首页 > 代码库 > installshield中的installscript编程
installshield中的installscript编程
上一篇说道了InstallShield快速建立一个打包程序,现在说说InstallShield里面的installscript脚本。该文属于个人理解,参考一些相关文章。
相关资料下载地址:http://download.csdn.net/detail/iamdale11/8104971
该资料中包括InstallShield内部库函数以及一篇对dialog的理解
首先,在上一篇的基础上,点击installation Designer.
点击下面的InstallScript。
先点击Setup.rul,然后如下图选择Before Move Data和OnFirstUIBefore.会在setup.rul文件中显示出上一篇文章中快速打包的程序源代码。
1、在安装过程中,需要先输入序列号,在自己定义流程中添加如下代码:
Dlg_SdRegisterUserEx://标签
szMsg = "";//信息字段
szTitle = "";//标题
szSerial = ""; //序列号
Disable (BACKBUTTON);//隐藏返回按钮
nResult = SdRegisterUserEx(szTitle,szMsg, szName,szCompany, szSerial );//调用库函数显示相应的dialog
//判断序列号是否正确
if ( szSerial != ‘1111‘) then
MessageBox("警告:输入序列号错误,请确认后重输!",SEVERE);
goto Dlg_SdRegisterUserEx;
endif;
if (nResult = BACK) goto Dlg_SdWelcome;
2、在安装过程中,需要对安装程序进行相应的环境检测,在自己需要检测的地方添加如下代码:
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);//获取注册表中的HKEY_LOCAL_MACHINE值。
if (RegDBKeyExist ("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4.0") < 0) then//判断相应的环境是否存在,这里是。NET 4.0
MessageBox("未安装相应运行环境,正在进行安装",WARNING);
// LaunchAppAndWait (SRCDISK^"1233456789.exe","", LAAW_OPTION_WAIT); //调用相应盘中的相关程序进行安装。
goto Dlg_SdLicense2;
else
MessageBox("已安装相应的环境",WARNING);
endif;
3、自定义dialog
如下图点击dialog,然后在all Dialog上右键点击new dialog。创建自定义的dialog。
然后在Files中右键创建新的.rul文件对相应的dialog进行文件创建。
如selectdlg.rul文件中代码如下:
//宏定义相关量,注意,为了取得dialog窗体上的相关特征,需要将相关特征的control identifier中的值取出
#define DLG_SELECTDLG "SelectDlg"
#define GENGXIN 1322
#define ANZHUANG 1323
#define NEXTBTN 1
#define BACKBTN 12
prototype SelectDlg(BYREF STRING,BYREF STRING); //定义一个方法
function SelectDlg( szTitle,szMsg)
//定义相关变量
number nId, nResult,szGGZZ,szTest;
HWND hwndDlg;
BOOL bDone;
string szGZ1,szGZ2,szTe;
begin
// Specify a name to identify the custom dialog in this installation.
// ensure general initialization is complete
if( !bSdInit ) then
SdInit();
endif;
//声明一个窗体
nResult = EzDefineDialog(DLG_SELECTDLG, ISUSER, "SelectDlg", 0 );
//MessageBox(szGZ,WARNING);
// Initialize the indicator used to control the while loop.
bDone = FALSE;
// Loop until done.
while (!bDone)
// Display the dialog and return the next dialog event.
nId = WaitOnDialog(DLG_SELECTDLG); //显示一个窗体
// Respond to the event.
switch(nId)
case DLG_INIT: //窗体初始化相关操作
CtrlSetState(DLG_SELECTDLG, ANZHUANG, BUTTON_CHECKED);
// No initialization is required for this example.
case NEXTBTN://下一步按钮操作
// getCtrlText();
if(CtrlGetState(DLG_SELECTDLG, GENGXIN) = BUTTON_CHECKED) then//判断radio按钮是否选中
nId=NEXT;
endif;
if(CtrlGetState(DLG_SELECTDLG, GENGXIN) = BUTTON_CHECKED) then
nId=CUSTOM;
endif;
bDone = TRUE;
case BACK://返回按钮
nId = BACK;
bDone = TRUE;
case DLG_ERR:
SdError( -1, "Errrrrrrr" );
nId = -1;
bDone = TRUE;
case DLG_CLOSE:
SdCloseDlg( hwndDlg, nId, bDone );
default:
// check standard handling
if(SdIsStdButton( nId ) && SdDoStdButton( nId )) then
bDone = TRUE;
endif;
endswitch;
endwhile;
// Cleanup Dialog
EndDialog( DLG_SELECTDLG );//结束窗体
ReleaseDialog( DLG_SELECTDLG );//释放窗体
SdUnInit();
// record data produced by this dialog
if( MODE = RECORDMODE ) then
endif;
return nId;
end;
4.文件复制操作
VarSave (SRCTARGETDIR); //保存系统变量值
SRCDIR =Strjq;//Strjq是路径字符串,里面保存的是相应路径
TARGETDIR=svDir; //svDir是路径字符串,里面保存的是相应路径
nResult=CopyFile( "*.*", "*.*"); //复制操作,具体可参看库函数介绍
VarRestore (SRCTARGETDIR); // 恢复缺省的源文件夹和目标文件夹路径
5.按钮验证函数,具体可参看资料中的自定义dialog浅谈。
function CheckInputValid(hwndDlg, bAllowNotSet)
STRING szInputAdd;
begin
if(bAllowNotSet) then
_WinSubEnableControl(hwndDlg, SD_PBUT_CONTINUE, 1);
return 1;
endif;
CtrlGetText(DLG_GXDLG, SVDIR, szInputAdd);
if(StrLength(szInputAdd) = 0) then
_WinSubEnableControl(hwndDlg, SD_PBUT_CONTINUE, 0);
return 0;
endif;
_WinSubEnableControl(hwndDlg, SD_PBUT_CONTINUE, 1);
return 1;
end;
我的感悟大致就是这些,请大家多多指出错误,相互讨论。
installshield中的installscript编程