InstallShield脚 本 语 言 是 类 似 C语 言 , 利 用 InstallShield的 向 导 或 模 板 都 可 以 生 成 基 本 的 脚 本 程 序 框 架 , 可 以 在 此 基 础 上 按 自 己 的 意 愿 进 行 修 改 和 添 加 。 
    一 .基 本 语 法 规 则 
     1.变 量 
     BOOL 布 尔 型 值 为 TRUE(1)或 FALSE(0) 
     CHAR 字 符 型 一 字 节 长 的 (8bit)的 字 符 
     HWND 窗 口 句 柄 用 来 存 放 窗 口 句 柄 
     INT 整 型 两 字 节 长 的 整 数 
     LIST 列 表 型 指 向 InstallShield列 表 , 用 ListCreate和 ListDestroy 
     LONG 扩 展 数 值 型 
     LPSTR 扩 展 指 针 
     NUMBER 数 值 型 存 放 四 字 节 长 的 数 值 , 范 围 从 -2147483648到 +2147483647 
     POINTER 指 针 型 
     SHORT 短 数 值 型 
     STRING 字 符 串 型 十 分 类 似 VC中 的 LPCTSTR 
      变 量 如 同 标 准 的 C语 言 , 在 使 用 前 需 要 事 先 声 名 。 变 量 通 常 在 两 个 位 置 进 行 声 名 , 一 是 主 程 序 外 部 , 这 样 的 变 量 为 全 局 变 量 , 二 是 各 函 数 的 变 量 声 名 区 , 这 样 的 变 量 是 局 部 变 量 。 
     
     
     2.操 作 符 
     一 般 的 与 C语 言 相 同 操 作 符 , 在 这 里 不 做 详 解 , 以 下 主 要 介 绍 比 较 特 殊 的 操 作 符 , 
     (1) + , - , * , / 
     以 上 四 个 操 作 符 与 C语 言 中 意 义 和 用 法 都 相 同 。 
     
     (2) && 
     与 操 作 , 与 C语 言 中 用 法 相 同 , 例 : x1 && x2 
     
     (3) || 
     或 操 作 , 与 C语 言 中 用 法 相 同 , 例 : x1 || x2 
     
     (4) ! 
     非 操 作 , 与 C语 言 中 用 法 相 同 , 例 : !x1 
     
     (5) * 
     指 针 操 作 , 类 似 C语 言 中 的 * 
     
     (6) & , | , ^ , ~ , << , >> 
     分 别 为 位 与 , 位 或 , 按 位 异 或 , 按 位 取 反 , 左 移 和 右 移 , 其 意 义 和 用 法 都 与 C语 言 中 基 本 相 同 。 
     
     (7) . 
     该 操 作 符 用 于 结 构 , 用 来 得 到 结 构 的 子 项 , 与 Delphi的 . 用 法 类 似 , 例 如 : 
     typedef SETTINGSREC 
     begin 
     BOOL bSwitchOn; 
     STRING szMssg[255]; 
     INT nVal; 
     
     end; 
     SETTINGSREC settings; 
     
     program 
     settings.bSwitchOn = FALSE; 
     settings.szMssg = "Off"; 
     settings.nVal = 0; 
     (8) = 
     既 可 作 为 赋 值 号 , 同 时 也 做 等 于 符 , 例 如 : 
     str1 = "String"; 
     if str1="String" then 
     endif; 
     
     (9) & 
     取 地 址 符 , 与 C语 言 用 法 类 似 。 
     
     (10) < , > , = , <= , >= , != 
     分 别 表 示 小 于 , 大 于 , 等 于 , 小 于 等 于 , 大 于 等 于 , 不 等 于 
     
     (11) + , ^ , % 
     用 于 字 符 串 的 操 作 。 
     
     (12) -> 
     结 构 指 针 , 与 C语 言 中 用 法 类 似 。 
     
     (13) @ 
     用 于 得 到 Resource窗 口 中 定 义 的 字 符 串 , 例 : 
     szReferenceFile = svDir ^ @PRODUCT_KEY; 
     
     
     3.函 数 
     InstallShield的 函 数 使 用 前 同 样 需 要 声 名 , 函 数 的 参 数 传 递 方 式 十 分 类 似 C语 言 , 例 如 下 面 的 函 数 声 名 : 
     prototype HandleMoveDataError( NUMBER ); 
     
    该 声 名 中 函 数 名 为 HandleMoveDataError, 传 递 一 个 NUMBER类 型 的 参 数 。 调 用 该 函 数 时 也 基 本 与 C语 言 中 相 同 。 
     函 数 体 的 标 准 格 式 为 : 
    function functionname(nResult) 
    // 函 数 变 量 声 名 区 
    begin 
    // 程 序 区 
    end; 
    通 常 的 函 数 返 回 一 个 NUMBER型 的 数 。 
     
      4.主 程 序 结 构 
     主 程 序 以 program开 始 , 以 endprogram结 尾 , 
     
     
    二 .框 架 程 序 的 基 本 结 构 
     程 序 开 始 为 函 数 与 变 量 的 声 明 区 
     通 过 向 导 建 立 的 框 架 程 序 包 含 以 下 一 些 主 函 数 : 
     prototype ShowDialogs(); 
     // 显 示 安 装 向 导 对 话 框 
     
     prototype MoveFileData(); 
     // 移 动 文 件 数 据 
     
     prototype HandleMoveDataError( NUMBER ); 
     // 移 动 数 据 出 错 处 理 
     
     prototype ProcessBeforeDataMove(); 
     // 移 动 文 件 数 据 前 的 处 理 
     
     prototype ProcessAfterDataMove(); 
     // 移 动 文 件 数 据 后 的 处 理 
     
     prototype SetupRegistry(); 
     // 安 装 注 册 , 用 户 可 在 此 加 入 一 些 代 码 , 通 常 用 于 对 注 册 表 的 操 作 
     
     prototype SetupFolders(); 
     // 安 装 生 成 快 捷 方 式 , 通 常 用 户 可 在 此 加 入 生 成 快 捷 方 式 的 代 码 
     
     prototype CleanUpInstall(); 
     // 安 装 完 成 后 清 除 临 时 文 件 
     
     prototype SetupInstall(); 
     // 安 装 的 实 际 过 程 
     
     prototype SetupScreen(); 
     // 设 置 安 装 过 程 的 屏 幕 显 示 ( 包 括 背 景 颜 色 , 字 体 等 ) 
     
     prototype CheckRequirements(); 
     // 检 查 安 装 需 求 ( 包 括 硬 盘 空 间 , 操 作 系 统 平 台 等 ) 
     
     prototype DialogShowSdWelcome(); 
     // 显 示 “ 欢 迎 ” 对 话 框 窗 口 
     
     prototype DialogShowSdLicense(); 
     // 显 示 许 可 信 息 的 对 话 框 
     
     prototype DialogShowSdRegisterUserEx(); 
     // 显 示 用 户 安 装 注 册 的 对 话 框 
     
     prototype DialogShowSdAskDestPath(); 
     // 显 示 “ 安 装 路 径 选 择 ” 对 话 框 
     
     prototype DialogShowSdSetupType(); 
     // 显 示 “ 安 装 类 型 选 择 ” 对 话 框 
     
     prototype DialogShowSdComponentDialog2(); 
     // 当 用 户 选 择 “ 定 制 ” 安 装 时 , 用 于 显 示 供 用 户 选 择 的 组 件 的 对 话 框 
     
     prototype DialogShowSdSelectFolder(); 
     // 显 示 快 捷 方 式 文 件 夹 选 择 的 对 话 框 
     
     prototype DialogShowSdFinishReboot(); 
     // 显 示 “ 安 装 完 成 重 启 动 ” 对 话 框 
     
     
    编 程 实 例 : 
    1.怎 样 在 进 度 条 左 上 角 显 示 当 前 安 装 的 文 件 
     在 function SetupScreen()中 加 入 以 下 语 句 
     Enable( INDVFILESTATUS ); 
     
    2.怎 样 改 变 窗 口 背 景 色 
     SetColor( BACKGROUND, **** )函 数 可 以 改 变 窗 口 背 景 色 , 在 适 当 的 位 置 加 上 它 即 可 , 其 中 第 二 个 变 量 可 以 为 以 下 值 : 
     BK_BLUE BK_MAGENTA BK_PINK BK_YELLOW 
     BK_GREEN BK_ORANGE BK_RED 
     以 上 几 种 为 渐 变 色 
     BK_SOLIDBLACK BK_SOLIDMAGENTA BK_SOLIDRED 
     BK_SOLIDBLUE BK_SOLIDORANGE BK_SOLIDWHITE 
     BK_SOLIDGREEN BK_SOLIDPINK BK_SOLIDYELLOW 
     同 时 第 二 个 参 数 也 可 以 用 RGB来 描 述 , 如 SetColor( BACKGROUND, RGB(0,0,255) ) 
     
    3.怎 样 在 InstallShield5.0以 下 版 本 建 立 快 捷 方 式 
     在 InstallShield5.1以 上 版 本 可 以 可 以 在 Resource窗 口 中 建 立 , 而 在 以 前 的 版 本 必 须 用 程 序 解 决 该 问 题 , 如 果 现 在 有 一 文 件 RegPad.exe( 安 装 路 径 为 用 户 选 定 的 ) , 给 该 程 序 在 “ 开 始 ” ->“ 程 序 ” 中 加 一 个 快 捷 方 式 , 具 体 实 现 程 序 如 下 : 
     function SetupFolders() 
     NUMBER nResult; 
     STRING svResult,szCommand; 
     STRING szName; 
     
     begin 
     szName = "RegPad.exe"; 
     szCommand = TARGETDIR ^ szName ; 
     LongPathToQuote ( szCommand , TRUE ); 
     AddFolderIcon ( FOLDER_PROGRAMS ^"RegPad1.0Beta","RegPad" , 
     szCommand , TARGETDIR , "" , 0 , "" , REPLACE ); 
     
    4.怎 样 控 制 用 户 序 列 号 
     在 向 导 生 成 的 框 架 程 序 中 , 定 义 了 一 个 STRING型 的 全 局 变 量 svSerial, 在 SdRegisterUserEx()结 束 时 将 给 该 值 赋 上 用 户 输 入 的 序 列 号 , 你 对 该 变 量 进 行 判 断 即 可 。 
     
    5.怎 样 控 制 重 新 启 动 计 算 机 
     只 需 加 入 以 下 语 句 
     System ( SYS_BOOTWIN ); 
     
    6.怎 样 给 Autoexec.bat或 Config.sys加 入 语 句 
     以 下 程 序 给 Autoexec.bat加 入 一 行 语 句 
     OpenFileMode ( FILE_MODE_APPEND ); 
     OpenFile (nvFileHandle, "C:\\", "Autoexec.bat"); 
     WriteLine ( nvFileHandle , "SET PATH=%PATH%;C:\\ORAWIN95\\BIN" ); 
     
    7.怎 样 在 安 装 结 束 时 允 许 用 户 选 择 是 否 打 开 Readme文 件 
     假 定 Readme.txt文 件 已 经 复 制 到 目 标 路 径 , 以 下 程 序 将 显 示 一 个 复 选 框 , 如 果 用 户 选 择 了 , 则 用 记 事 本 打 开 Readme.txt。 
     function DialogShowSdFinishReboot() 
     NUMBER nResult, nDefOptions; 
     STRING szTitle, szMsg1, szMsg2, szOption1, szOption2,szPathls; 
     NUMBER bOpt1, bOpt2; 
     
     begin 
     if (!BATCH_INSTALL) then 
     bOpt1 = TRUE; 
     bOpt2 = FALSE; 
     szMsg1 = ""; 
     szMsg2 = ""; 
     szOption1 = "阅 读 Readme文 件 "; 
     szOption2 = ""; 
     nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 ); 
     
     if bOpt1 = TRUE then 
     CopyFile ( "Readme.txt" , "Readme.txt" ); 
     LaunchApp ( WINDIR^"Notepad.exe" , TARGETDIR^"Readme.txt" ); 
     endif; 
     
     return 0; 
     endif; 
     .......... 
     
    8.如 何 指 定 默 认 路 径 
     在 function SetupInstall()中 修 改 以 下 代 码 , 如 默 认 目 录 改 为 C:\JttMis, 见 以 下 修 改 的 代 码 
     if (bIs32BitSetup) then 
     svDir = WINDISK ^ "Jttmis"; 
     else 
     svDir = WINDISK ^ "Jttmis"; // use short names 
     endif; 
     
     TARGETDIR = svDir; 

解决方案 »

  1.   

    我想知道的是分发时需要一些什么文件(DLL等)
    提供资料即可
    下载地址也可以。
      

  2.   

    1、你的注册表ODBC中对应数据库需要的文件
    2、文件组中添加这些文件
    3、安装时改动用户ODBC,将这些文件联上http://www.csdn.net/expert/topic/141/141585.shtm
      

  3.   

    我有一个install shield的介绍文件 你要就拿去来看看
    把你的mail给我 我给你发一个过去
    你可考给分啊 
      

  4.   

    我靠
    太巧了 我刚好做过这样的程序 当时这个问题困扰了 将近一个月
    建议你使用 wise来安装
    用install shield可能会出错
    你需要的是 dao35或者dao36 还要有mdac
    有这两个就行了 你放心
    如果install 不好用 就用wise 知道 wise是什么么?
    就是盗版软件经常出现的那个 安装界面 也不错
      

  5.   

    to jinnys(爱咋咋地)
    我的email:[email protected],问题解决了一定给分
    我的水平很低,请你说详细一点!
      

  6.   

    把你的程序换成ADO连接的,直接发布可执行程序和ACCESS的库文件就可以了。
      

  7.   

    to bigroom(匆匆):
       我用了ADO,不过发现只发布EXE文件和ACCESS库文件并不行,你可以试一试。
    采用ADO需要那些文件呢?比如msjetoledb40.dll等等。
      

  8.   

    用ado的,需要发布madc_typ.exe这个文件,在delphi光盘的install目录下有