Installshield軟件項目打包學習

Installshield打包學習記錄

個人工作學習的一點點記錄,可能有不專業的表述,各位可以提出建議,共同學習。


目錄

  • Installshield打包學習記錄
    • 一、Installshield的幾個事件:
        • 1. Before Move Data(安裝數據前)
          • 1.1 OnFirstUIBefore
        • 2. Move Data(安裝數據過程中)
          • 2.1 OnGeneratingMSIScript
          • 2.2 OnGeneratedMSIScript
          • 2.3 OnInstallFilesActionBefore
          • 2.4 OnInstallFilesActionAfter
          • 2.5 OnMoving
          • 2.6 OnMoved
        • 3. After Move Data(安裝數據后)
          • 3.1 OnFirstUIAfter
          • 3.2 OnMaintUIAfter
          • 3.3 OnEnd
    • 二、Installshield打包過程中的問題
        • 1. 錯誤6003
        • 2. 錯誤1014
        • 3. 錯誤7132
    • 三、可能用到的bat復制執行腳本
        • 1. 復制文件到指定路徑
        • 2. 利用腳本安裝下載的字體

一、Installshield的幾個事件:

下面介紹幾個重要的事件,事件分為三大類:

1. Before Move Data(安裝數據前)

1.1 OnFirstUIBefore

就是在第一次安裝時,在復制安裝數據之前觸發的事件,更改這個事件的腳本可自定義安裝步驟。
例如,我們可以在這里自定義去設定先彈出軟件安裝歡迎界面、用戶注冊、安裝位置的選擇、以及安裝模式的定義等等。

舉個例子:

function OnFirstUIBefore()NUMBER nResult, nSetupType, nvSize, nUser, nExclusiveType, nNeutrValue, nLength;STRING szConfigXmlPath, szTitle, szMsg, szQuestion, svName, svCompany, szFile, szDeviceType, szText1, szText2, szText3, szText4, szText5, szValueBuf;STRING szLicenseFile;STRING szLanguageCode, szCurUse, szCurInstru;BOOL bCustom, bIgnore1, bIgnore2, bCheck1, bCheck2, bCheck3, bCheck4, bNeutralVer;
begin	// TO DO: if you want to enable background, window title, and caption bar title          // 歡迎界面
Dlg_SdWelcome:szTitle = "";szMsg   = "";nResult = SdWelcome(szTitle, szMsg); if (nResult = BACK) goto Dlg_SdWelcome;// 安裝位置自定義
Dlg_SdAskDestPath:szMsg = "";    	nResult = SdAskDestPath(szTitle, szMsg, INSTALLDIR, 0);if (nNeutrValue = 0) then elseif (nResult = BACK) goto Dlg_SdWelcome; endif;// 開始安裝復制數據
Dlg_SdStartCopy:szTitle = "";szMsg   = "";nResult = SdStartCopy2( szTitle, szMsg );if (nResult = BACK) thengoto Dlg_SdAskDestPath;endif;SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_FIRSTUI ) );// setup default statusEnable(STATUSEX);return 0;
end; 

2. Move Data(安裝數據過程中)

這個類型當中的事件一般來說不需要改動。在這里可以做一些軟件安裝的必需工作,比如你的軟件需要mysql數據庫支持,但安裝的電腦上有沒有,此時我們把mysql數據庫的安裝包和執行安裝的腳本打包進項目,讓腳本替我們在這個時候去復制移動,去執行就可以了。

還是舉個例子:

function OnMoved() STRING szMySqlBatPath, szConfigXmlPath,szMyFontPath, szMyFontBatPath, szMyAppFontPath, szResult, szMyDatabaseBatPath; NUMBER nNeutrValue;
begin      if( !MAINTENANCE ) then// copy MySQL57 to C:szMySqlBatPath = APPINSTALLDIR + "\\" + szCopySQLScriPath;LaunchAppAndWait(szMySqlBatPath, "", LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN); 	 endif;          end;
2.1 OnGeneratingMSIScript

在Action(動作) :LauchConditions之前執行;

2.2 OnGeneratedMSIScript

在Action(動作) LauchConditions之后執行;

2.3 OnInstallFilesActionBefore

在Action(動作) InstallFiles之前執行;

2.4 OnInstallFilesActionAfter

在Action(動作) InstallFiles之后執行;

2.5 OnMoving

在Action(動作) InstallInitialize之后執行;

2.6 OnMoved

在Action(動作) GeneratedMSIScript之前執行;

3. After Move Data(安裝數據后)

3.1 OnFirstUIAfter

在第一次安裝時,在復制安裝數據之后觸發的事件,例如有一個系統需要將安裝路徑設置FTP虛擬目錄,如果在安裝數據之前就設置的話,該路徑不存在,無法設置成功,因此需要在這個事件中設置。

function OnFirstUIAfter()STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;NUMBER bOpt1, bOpt2;
beginDisable(STATUSEX);bOpt1   = FALSE;bOpt2   = FALSE;    if ( BATCH_INSTALL ) thenSdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );elseSdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );endif; end;
3.2 OnMaintUIAfter

在修改或卸載時,在修改或卸載數據之后觸發的事件;這個時候比如確認執行卸載后,我們就可以清除軟件安裝目錄信息:

function OnMaintUIAfter()STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2, szAPPInstallDir;NUMBER bOpt1, bOpt2, nBufferSize;
beginDisable(STATUSEX);if( REMOVEALLMODE ) then   szTitle = SdLoadString(IFX_SDFINISH_REMOVE_TITLE);szMsg1 = SdLoadString(IFX_SDFINISH_REMOVE_MSG1);    // Del AppPath  DeleteDir(APPINSTALLDIR, ALLCONTENTS);  elseszTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);    szMsg1  = SdLoadString(IFX_SDFINISH_MAINT_MSG1);endif;bOpt1   = FALSE;bOpt2   = FALSE;    if ( BATCH_INSTALL ) thenSdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );else    SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 );endif;
end;
3.3 OnEnd

這個就是在軟件安裝后來進行觸發的時間(在點擊“完成”按鈕之后觸發),比如利用腳本方式創建數據庫,即可以在這部分進行完成:

function OnEnd()STRING szMySqlBatPath, szResumeConfigPath, szResult, szConfigAppPath, szPreAPPInstallDir; NUMBER nBufferSize;
begin if ( MAINTENANCE ) then// Resume Config Files   // Look up Preinstall Path  nBufferSize = 1024;  MsiGetProductInfo(PRODUCT_GUID, INSTALLPROPERTY_INSTALLLOCATION, szPreAPPInstallDir, nBufferSize);szResumeConfigPath = szPreAPPInstallDir ^ szApplicationName + "\\" + szResumeScriPath;LaunchAppAndWait(szResumeConfigPath, "", LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN);  else    // Totol Install Execute Sql Script mysql-intit.batszMySqlBatPath = szMySqlPath + "\\" + szProgram;LaunchAppAndWait(szMySqlBatPath, "", LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN);     // Run db_install_startup.bat      if FindFile(APPINSTALLDIR , szInitDatabasePath, szResult) = 0 thenszMyDatabaseBatPath = APPINSTALLDIR + "\\" + szInitDatabasePath;LaunchAppAndWait(szMyDatabaseBatPath, "", LAAW_OPTION_HIDDEN); endif;	 endif;end; 

二、Installshield打包過程中的問題

1. 錯誤6003

這個錯誤可能是因為項目的一些必要的包沒有下載,需要重新下載即可

2. 錯誤1014

這個問題比較好解決一些,一般來講,在你進行build的時候,不要打開需要打包的文件夾中的某個文件,被占用則會報這個錯誤(build的時候不要打開Setup.exe所在的文件夾)

3. 錯誤7132

出現這個問題的原因,則有可能是:

  • 當構建具有以下兩個元素的基本MSI項目時,可能會發生此錯誤:
    – 版本的Build選項卡下的UI Languages設置包含了不支持的語言InstallScript
    – 該項目包含一個InstallScript類型的Custom Action

三、可能用到的bat復制執行腳本

1. 復制文件到指定路徑

::被復制的文件夾
set tarDir=
::文件名
set filename=db_install_startup.bat::判斷文件夾是否存在
if not exist %tarDir% {::創建目錄mkdir %tarDir%
}::復制文件,并重定向輸出
copy %filename% %tarDir%%filename% > nul::判斷是否執行成功
if "%errorlevel%"=="0" {echo Copy successfully
} else {echo Copy failed
}

其實用XCopyFile進行文件夾拷貝只需要一句話:
nResult = XCopyFile("C:...//SrcDir//*.*","C:...//TargetDir//*.*",COMP_NORMAL);

2. 利用腳本安裝下載的字體

@echo off
::字體所在完整路徑
set "zt=D:\SourceHanSansSC-Regular.ttc"
::安裝字體
mshta "javascript:new ActiveXObject('Shell.Application').NameSpace(20).CopyHere('%zt:\=\\%',0x0010);close()"
pause

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38647.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端代理配置

dev: {env: require(./dev.env),port: process.env.PORT || 8080,autoOpenBrowser: true,assetsSubDirectory: static,assetsPublicPath: /,proxyTable: {// 以 /party/fundamental/ 開頭的請求,全部轉發到 target 設置的地址/party/fundamental/: {// target: http…

【BASH】回顧與知識點梳理(二十八)

【BASH】回顧與知識點梳理 二十八 二十八. 例行性工作排程(crontab)28.1 什么是例行性工作排程Linux 工作排程的種類: at, cronCentOS Linux 系統上常見的例行性工作 28.2 僅執行一次的工作排程atd 的啟動at 的運作方式實際運作單一工作排程at 工作的管理batch&…

Windows下升級jdk1.8小版本

1.首先下載要升級jdk最新版本,下載地址:Java Downloads | Oracle 中國 2.下載完畢之后,直接雙擊下載完畢后的文件,進行安裝。 3.安裝完畢后,調整環境變量至新安裝的jdk位置 4.此時,idea啟動項目有可能會出…

ATF bl1 ufshc_dme_get/set處理流程分析

ATF bl1 ufshc_dme_get/set處理流程分析 UFS術語縮略詞1 ATF的下載鏈接2 ATF BL1 ufshc_dme_get/set流程3 ufs總體架構圖3.1 UFS Top Level Architecture3.2 UFS System Model 4 ufshc_dme_get/set函數接口詳細分析4.1 ufshc_dme_get4.2 ufshc_dme_set4.3 ufshc_send_uic_cmd4.…

nodejs+vue+elementui考研互助交流網站

語言 node.js 框架:Express 前端:Vue.js 數據庫:mysql 數據庫工具:Navicat 開發軟件:VScode 前端nodejsvueelementui,該系統采用vue技術和B/S結構進行開發設計,后臺使用MySQL數據庫進行數據存儲。系統主要分為兩大模…

大數據課程J2——Scala的基礎語法和函數

文章作者郵箱:yugongshiyesina.cn 地址:廣東惠州 ▲ 本章節目的 ? 掌握Scala的基礎語法; ? 掌握Scala的函數庫; 一、Scala 基礎語法一 1. 概述 語句 說明 示例 var 用來聲明一個變量, 變量聲明后…

java面試題(16):Mysql一致性視圖是啥時候建立的

1 演示錯誤案例 先給大家來一個錯誤演示。 我們打開兩個會話窗口,默認情況下隔離級別是可重復讀,我們來看下: 首先在 A 會話中查看當前 user 表,查看完成后開啟事務: 可以看到id3的數據sex是男。 接下來在 B 會話中…

K8S系列一:概念入門

寫在前面 本文組織方式: K8S的架構、作用和目的。需要首先對K8S整體有所了解。 K8S是什么? 為什么是K8S? K8S怎么做? K8S的重要概念,即K8S的API對象。要學習和使用K8S必須知道和掌握的幾個對象。 Pod 實例 Volume 數…

php錯誤類型與處理

1 語法編譯錯誤,少了分號,這是系統觸發的錯誤,不需要我們去管。 2 錯誤類型有四種:error致命錯誤,代碼不會往下運行;warning:提醒錯誤,會往下運行,但是會有意想不到的結果…

【C++學習】STL容器——stack和queue

目錄 一、stack的介紹和使用 1.1 stack的介紹 1.2 stack的使用 1.3 stack的模擬實現 二、queue的介紹和使用 2.1 queue的介紹 2.2 queue的使用 2.3 queue的模擬實現 三、priority_queue的介紹和使用 3.1 priority_queue的介紹和使用 3.2 priority_queue的使用 3.4 p…

JVM---理解jvm之對象已死怎么判斷?

目錄 引用計數算法 什么是引用 可達性分析算法(用的最多的) 引用計數算法 定義:在對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加一;當引用失效時,計數器值就減一&#xff1…

國內外醫療器械政策法規網站集合

隨著醫療技術的不斷發展,醫療器械在現代醫療中扮演著重要的角色。為了確保醫療器械的安全性、有效性和質量,各國紛紛制定了一系列的政策法規來監管醫療器械的研發、生產、銷售和使用。這些政策法規的制定和實施對于保障公眾健康、促進醫療器械產業的健康…

docker--------介紹、常用命令,國內源配置

1 docker 國內源配置 # 鏡像:一堆文件 -目前從遠程倉庫下載的:https://hub.docker.com/ -鏡像有很多人提供:官方提供,第三方提供 -鏡像--》更新--》Tag不同版本 -centos:latest 最新 -docker pull 能找到…

舊版本docker未及時更新,導致更新/etc/docker/daemon.json配置文件出現docker重啟失敗

一、背景 安裝完docker和containerd之后,嘗試重啟docker的時候,報錯如下: systemctl restart dockerJob for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “…

學習ts(一)數據類型(基礎類型和任意類型)

運行 起步安裝 npm install typescript -g 運行tsc index.ts生成對應的js文件,然后使用node index.js執行js文件 為了方便運行還可以安裝插件,ts-node index.ts運行即可 npm i ts-node -g npm init -y npm i types/node -D基本數據類型 // 1.字符…

探索不同類型的代理服務器 (代理 IP、socks5 代理)及其在網絡安全與爬蟲中的應用

1. 代理服務器簡介 代理服務器是一臺充當中間人的服務器,它在客戶端與目標服務器之間傳遞網絡請求。代理服務器在不同層級上可以執行不同的任務,包括緩存、過濾、負載均衡和隱藏客戶端真實IP地址等。在網絡安全和爬蟲領域,代理服務器具有重要…

ARM(匯編指令)

.global _start _start:/*mov r0,#0x5mov r1,#0x6 bl LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0mov pc,lr*/ mov r0,#0x1mov r1,#0x0mov r2,#0x64bl Loop Loop:cmp r0,r2bhi stopadd r1,r1,r0add r0,r0,#0x01mov pc,lr stop:B stop.end

現有的vue3+ts+vite項目集成electron

效果圖 什么時Electron Electron是使用JavaScript,HTML和CSS構建跨平臺的桌面應用程序框架。 Electron兼容Mac、Windows和Linux,可以構建出三個平臺的應用程序。 現有的vue3項目集成Electron 安裝依賴 原來有一個vue3+ts+vite+pnpm的項目,其中sub-modules是子項目,web是…

Monge矩陣

Monge矩陣 對一個m*n的實數矩陣A&#xff0c;如果對所有i&#xff0c;j&#xff0c;k和l&#xff0c;1≤ i<k ≤ m和1≤ j<l ≤ n&#xff0c;有 A[i,j]A[k,l] ≤ A[i,l]A[k,j] 那么&#xff0c;此矩陣A為Monge矩陣。 換句話說&#xff0c;每當我們從矩陣中挑…

全面梳理Python下的NLP 庫

一、說明 Python 對自然語言處理庫有豐富的支持。從文本處理、標記化文本并確定其引理開始&#xff0c;到句法分析、解析文本并分配句法角色&#xff0c;再到語義處理&#xff0c;例如識別命名實體、情感分析和文檔分類&#xff0c;一切都由至少一個庫提供。那么&#xff0c;你…