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);//隐藏返回button
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://下一步button操作
// getCtrlText();
if(CtrlGetState(DLG_SELECTDLG, GENGXIN) = BUTTON_CHECKED) then//推断radiobutton是否选中
nId=NEXT;
endif;
if(CtrlGetState(DLG_SELECTDLG, GENGXIN) = BUTTON_CHECKED) then
nId=CUSTOM;
endif;
bDone = TRUE;
case BACK://返回button
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.button验证函数,详细可參看资料中的自己定义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编程的更多相关文章
- INFO - InstallShield中的InstallScript工程Setup.exe /s的使用细节
在InstallShield的各种工程类型中,Basic MSI工程Build出的安装包基于Windows Installer标准,所以默认就支持静默安装(至于如何静默安装,请自行补充相关知识).而对 ...
- 如何设置Installshield中 feature的选中状态
原文:如何设置Installshield中 feature的选中状态 上一篇: 使用strtuts2的iterator标签循环输出二维数组之前一直有筒子问如何设置Installshield中 feat ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
- .Net中的并行编程-2.ConcurrentStack的实现与分析
在上篇文章<.net中的并行编程-1.基础知识>中列出了在.net进行多核或并行编程中需要的基础知识,今天就来分析在基础知识树中一个比较简单常用的并发数据结构--.net类库中无锁栈的实现 ...
- .Net中的并行编程-3.ConcurrentQueue实现与分析
在上文<.Net中的并行编程-2.ConcurrentQueue的实现与分析> 中解释了无锁的相关概念,无独有偶BCL提供的ConcurrentQueue也是基于原子操作实现, 由于Con ...
- .Net中的并行编程-6.常用优化策略
本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略. 一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...
- .Net中的并行编程-5.流水线模型实战
自己在Excel整理了很多想写的话题,但苦于最近比较忙(其实这是借口).... 上篇文章<.Net中的并行编程-4.实现高性能异步队列>介绍了异步队列的实现,本篇文章介绍我实际工作者遇到了 ...
- .Net中的并行编程-4.实现高性能异步队列
上文<.Net中的并行编程-3.ConcurrentQueue实现与分析>分析了ConcurrentQueue的实现,本章就基于ConcurrentQueue实现一个高性能的异步队列,该队 ...
- 网游中的网络编程系列1:UDP vs. TCP
原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...
随机推荐
- 转 PHP - AJAX 与 PHP
1. AJAX 被用于创建交互性更强的应用程序. AJAX PHP 实例 下面的实例将演示当用户在输入框中键入字符时,网页如何与 Web 服务器进行通信: 实例 尝试在输入框中输入一个名字,如:Ann ...
- 计算科学(转自wiki)
计算科学(也称科学计算 scientific computation 或 SC)是一个快速增长的多学科领域,使用先进的计算能力来理解和解决复杂的问题. 计算科学包括三个不同的方面: 1. 开发用于解决 ...
- kafka_2.11-0.8.2.2.tgz的3节点集群的下载、安装和配置(图文详解)
kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载.安装和配置(图文详细教程)绝对干货 一.安装前准备 1.1 示例机器 二. JDK7 安装 1.1 下载地址 下载地址: http: ...
- .net面试题 2016
经典面试题2016——50题 1.面向对象语言具有——继承性——,——封装性——,——多态性—— 继承性:就是让一个类型的对象拥有另一个类型的对象的属性的方法.继承后,子类拥有父类的属性和方法. 封装 ...
- 百度人脸识别AI实践.doc
0, 前言 百度开放了很多AI能力,其中人脸识别就是其中之一. 本文对百度人脸识别AI进行实践检验,看看其使用效果如何. 鉴于是最为基础的实践,基本都是在其接口范例代码修改而来. 百度人脸识别AI网站 ...
- js中取整数的方法
1.取整的方法 Math.floor( ) Math 对象的方法--取比当前数值小的最大整数(下取整). Math.ceil( ) Math对象的方法--取比当前数值大的最小整数(上取整). Math ...
- ci框架中model简单的mysql操作
<?php class SingerModel extends CI_Model { function SingerModel() { //会将数据库对象赋值给CI_Controller的db属 ...
- node遍历给定目录下特定文件,内容合并到一个文件
遍历目录用了fs.readdir这个异步方法,得到当前目录下所有的文件和目录的一个数组.然后判断: if文件,并且后缀符合设定的规则(本文例子是符合后缀ts,js)直接用同步方法写入, if目录,继续 ...
- CAD使用SetXData写数据(com接口)
主要用到函数说明: MxDrawEntity::SetXData 设置实体的扩展数据,详细说明如下: 参数 说明 [in] IMxDrawResbuf* pXData 扩展数据链表 c#代码实现如下: ...
- TWaver3D特效系列之环境映射
随着TWaver3D的快速发展,越来越多的各种功能都在不断加强,包括性能的极大提升(可以参考这里),3D编辑器的易用性和功能持续增强(欢迎大家申请试用),各种特效的增加,特效是本文的主角. 对于UI技 ...