InstallShield部分常用函数

LaunchAppAndWaitLaunchApp函数
原型如下:
   LaunchAppAndWait (szProgram, szCmdLine, lWait);
   LaunchApp (szCommand, szCmdLine);

  这两个函数都是用来启动一个应用程序,它们唯一的区别是LaunchApp函数直到已启动的应用程序被关闭或中断后,流程才会被返回,而LaunchAppAndWait可以立即返回流程。参数szProgram和szCommand都是用来指定要启动的应用程序文件全名,但对于szProgram来说,若应用程序没有指定路径和文件扩展名,LaunchAppAndWait不会启动该应用程序,而对于szCommand来说,若没有指定应用程序的路径,LaunchApp将在当前目录、Windows目录、Windows系统目录以及其他PATH环境变量指定的目录中进行查找。szCmdLine用来指定应用程序执行时的命令行参数,若没有,则将此参数设为NULL。lWait用来指定流程的返回方式,它可以是NOWAIT(立即返回)或WAIT(直到应用程序关闭或中断才将流程返回)。
示例:
MessageBox ("接下来系统将安装 Tomcat5.0 ...", INFORMATION);
  szJDK = SUPPORTDIR ^ "tomcat-5.0.28.exe";
if (LaunchAppAndWait (szJDK, "", WAIT) < 0) then
MessageBox ("不能加载程序 "+ szJDK +".",SEVERE);
endif;

查找注册表:


// 搜寻 tomcat 安装的路径
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szKey = "SOFTWARE\\Apache Software Foundation\\Tomcat\\5.0";
nType = REGDB_STRING;
svTomcat = "";
// Get the list of subkeys.
if(RegDBGetKeyValueEx(szKey, "InstallPath", nType, svTomcat, nvSize) < 0) then

MessageBox ("查找 Tomcat 路径失败,系统不能继续安装", SEVERE);
return -1;
endif;

TARGETDIR = svTomcat + "\\webapps";


CopyFileXCopyFile函数

原型如下:

   CopyFile (szSrcFile, szTargetFile);
   XCopyFile (szSrcFile, szTargetFile, nOp);

  这两个函数都是用来将文件从源文件夹复制到目标文件夹中。虽然,CopyFile函数不像XCopyFile可以复制源文件夹下所有的子文件夹中的文件,但它可以将复制到目标文件夹中的文件重新命名。显然,XCopyFile函数对成批覆制文件非常有效,并可根据由nOp指定的方式来操作。nOp可以是下列的预定义值:

   COMP_NORMAL 正常方式,复制时覆盖相同的文件
   COMP_UPDATE_SAME 它和COMP_UPDATE_DATE或COMP_UPDATE_VERSION组合
   COMP_UPDATE_DATE 只有当源文件的日期和时间比相同的目标文件新时才会覆盖
   COMP_UPDATE_VERSION 只有当源文件的版本比相同的目标文件新时才会覆盖
   SELFREGISTER 复制文件时还进行自我注册操作
   SHAREDFILE 把复制的所有文件当作是共享的
   LOCKEDFILE 记录锁定的.dll和.exe文件以便Windows重启后更新
   EXCLUDE_SUBDIR 复制时不含有子文件夹
   INCLUDE_SUBDIR 连同子文件夹中的文件一起复制

  这两个函数都有可能返回下列的值:

  0 成功复制
  COPY_ERR_CREATEDIR 目标文件夹不能创建
  COPY_ERR_MEMORY 不能为复制文件进程分配必要的内存
  COPY_ERR_NODISKSPACE 目标磁盘中没有足够的可用空间
  COPY_ERR_OPENINPUT 找不到源文件夹
  COPY_ERR_OPENOUTPUT 不能复制函数中指定的文件
  COPY_ERR_TARGETREADONLY 目标文件夹写保护
  -51 自我注册文件没有注册成功(只用于XCopyFile函数)
  其他负数 产生未知的错误

  需要说明的是,InstallShield使用系统变量SRCDIR和TARGETDIR表示源文件夹和目标文件夹的路径。由于安装程序中其他函数也会使用这些变量,因此在调用CopyFile与XCopyFile函数前,必须先用VarSave函数将SRCDIR和TARGETDIR的当前值保存,然后设置相应的路径,最后用VarRestore函数恢复SRCDIR和TARGETDIR的原来值。

示例:
   #define SOURCE_DIR "C:\\Windows"
   #define TARGET_DIR "D:\\Temp"
   NUMBER nResult;
   program
    VarSave (SRCTARGETDIR); // 将缺省的源文件夹和目标文件夹路径保存
    SRCDIR = SOURCE_DIR; // 设定源文件夹路径
    TARGETDIR = TARGET_DIR; // 设定目标文件夹路径
    // 复制文件,它等效于XCopyFile("*.TXT", "", COMP_NORMAL)
    nResult = CopyFile("*.TXT", "*.*");
    if ( nResult < 0) then
     MessageBox ("不能复制文件!", SEVERE);
    else
     MessageBox ("文件复制完毕。", INFORMATION);
    endif;
    VarRestore (SRCTARGETDIR); // 恢复缺省的源文件夹和目标文件夹路径

   endprogram


执行CMD中的命令示例:


szParam = "/c mysql -uroot -proot -e \"source "+SUPPORTDIR^"data.sql"+"\"";
MessageBox (szParam,INFORMATION);
if (LaunchAppAndWait ("cmd", szParam, WAIT) < 0) then
MessageBox ("导入数据失败",SEVERE);
else
MessageBox ("导入数据成功",INFORMATION);
endif;
//注意参数要以"/c"开始,否则参数中的命令得不到执行。 "/k"也可以,只是不会自动关闭CMD窗口。


在实践中发现有些机器上在MySql中执行source命令需要路径中sql文件名前必须为“/”,可通过下面语句修改:

szSqlPath = SUPPORTDIR;

szSqlPath[StrLength(szSqlPath)-1] ='/';

szParam = "/c mysql -uroot -proot -e \"source "+szSqlPath+"data.sql"+"\"";












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章