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"+"\"";












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