狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

利用InstallShield12制作安裝包詳細教程

admin
2013年1月17日 2:50 本文熱度 8649


認識InstallShield12


    進入公司以來,頭一件工作就是接手了公司所有系統平臺的打包安裝工作,從做這件工作到現在已經有一段時間了,趁著晚上這點閑暇時間,總結一下。
   
記得剛開始聽到InstallShield時,竟不知其為何物!后來纏著InstallShield過了差不多一周時間,才漸漸有了入門的感覺。而今,打包安裝工作已經成為日常工作之一了,每天花上不到半個小時的時間即可完成多個安裝包的制作及相應升級包的制作。說到這里,特別準備了幾個部分,也來說說利用InstallShield12制作安裝包的一些方法技巧。今天是第一部分,認識InstallShield12(其實市面上已經有InstallShield2009、InstallShield2010了,只不過本人使用的是InstallShield12,故拿其作為例子)。
   
在介紹InstallShield12之前,或許很多使用InstallShield工具打包的朋友都應該很清楚,InstallShield方面的高級資料較少,一般的來源可以從InstallShield中文技術論壇(
http://installshield.jaron.cn/forum/)、InstallShield公司的社區網站(http://community.flexerasoftware.com/)及英文版的幫助文檔找到部分資料。不過,說實在的,真正有幫助的還是相對較少,這其中可能就需要自己去挖掘了。
   
關于InstallShield12,首先,我們先來看看新建一個InstallScript Project后的界面示意圖,如圖1.1所示:



圖1.1


    在圖1.1中,這是一個向導式的制作安裝包的全過程,如果制作簡單的安裝包,那么使用這個向導進行Step by step的方式就可以了,而如果要制作較為復雜的安裝包或升級包,那么就需要用到Installation Designer面板中的相關操作了,這個在后面再進行闡述。
   
我們先來看看在Project Assistant面板中每一項的功能:
(1)Application Information:設置安裝包的一些基本信息,如公司名稱、安裝包名稱、安裝包版本號、公司網站地址等;
(2)Installation Architecture:設置安裝包的主體結構,一般用來設置安裝包中有多少個安裝項目;
(3)Application Files:指定安裝文件路徑及所需的安裝文件夾,在這一步可以通過Add Files或者Add Folders將文件或文件夾添加到指定位置,如Application Target Folder或Program Files或Windows System下等,關于這其中的一些存放目錄的區別會在后面進行說明;
(4)Application Redistributables:用于添加第三方組件;
(5)Application Shortcuts:創建程序啟動的快捷方式,如開始菜單快捷方式、桌面快捷方式等;
(6)Application Registry:對注冊表進行操作;
(7)Installation Interview:一些簡單的對話框選擇操作,如使用協議、公司名用戶名等;
(8)Installation Localization:安裝包界面語言的選擇;
(9)Build Installation:選擇安裝包的格式并編譯成安裝包,如*.exe文件等;
   
以上是對Project Assistant面板中每一步的基本功能進行了簡單的說明,通過這個向導,即可完成一個簡單的安裝包制作。
    下面我們再來看看Installation Designer面板,如圖1.2所示:


圖1.2


    在圖1.2中,可以看到,該界面其實就是對Project Assistant面板的細化,對其中的部分功能說明如下:
(1)Installation Information->Project Properties->Setup Languages:設置安裝包的語言種類,可以設置多種語言,在運行安裝包時會出現安裝語言選擇界面;
(2)Installation Information->Project Properties->Add or Remove Programs->Disable Change Button:隱藏該安裝包在添加刪除程序列表中的更改按鈕;
(3)Installation Information->Project Properties->Add or Remove Programs->Disable Remove Button:隱藏該安裝包在添加刪除程序列表中的刪除按鈕。


(4)Organization->Feature:特征,每個Feature可包含子Feature及若干個Component,每個Feature都會出現在Feature選擇界面中,一旦Feature被選擇安裝其包含的Component就會被安裝到系統中去;
(5)Organization->Component:組件,每個Component可設置需要安裝的文件、寫入的注冊表信息、創建的快捷方式等等;通常在這里指定是否卸載、是否注冊、安裝策略(如果遇到舊版本是全部覆蓋還是部分覆蓋,是先版本后時間覆蓋還是只按版本高低覆蓋等);
(6)Organization->Setup Type:安裝類型,一般默認有Minimal(壓縮)、Typical(典型)、Custom(自定義),每種安裝類型包含若干個Feature;
(7)Organization->Setup Design:設置Features、Components(組件)及Files(安裝文件)等等。


(8)Application Data->Files and Folders:管理安裝文件夾及文件,基本上每次打包都要使用;
(9)Application Data->Objects:選擇需要安裝的系統運行庫。


(10)System Configuration->Shortcuts:創建快捷方式;
(11)System Configuration->Registry:向注冊表中添加鍵值;
(12)System Configuration->XML File Changes:添加或更改XML文件。


(13)Server Configuration->Internet Infosmation Services:配置IIS網站及虛擬目錄;
(14)Server Configuration->SQL Scripts:配置數據庫,可以支持Microsoft SQL Server, MySQL, and Oracle數據庫;


(15)Behavior and Logic->InstallScript:編寫安裝程序的腳本,這是制作復雜的基于InstallScript的安裝包的最常使用的部分;
(16)Behavior and Logic->Support Files/Billboards:添加安裝過程中需要的文件及安裝背景;


(17)User Interface->Dialogs:編輯安裝過程中使用的窗體,在InstallShield12中不包含準備安裝窗體和復制文件窗體,所以如果要編輯這兩個窗體的界面是很難辦到的,至少是不完美的。


(18)Media->Path Variables:編輯安裝路徑變量;
(19)Media->Releases:制作安裝媒體。


(20)Additional Tools->Dependency Scanners:搜索工具;
(21)Additional Tools->Direct Editor:命令編輯器,在這里可以查看或編輯安裝程序的各類信息。


    通過上面的基本描述,要制作一個安裝包,通過最常用的是Installation Information、Organization->Component、Organization->Setup Type、Application Data->Files and Folders、System Configuration->Shortcuts、Behavior and Logic->InstallScriptMedia->Releases等部分。


    此外,在這里還需要再簡單說明一下Application Files中幾個目錄的區別,首先是Application Target Folder,該目錄表示安裝包在目標系統中要安裝的目錄,其根目錄可在InstallScript腳本中編寫,而用戶則可以在安裝過程中進行選擇并安裝到用戶想要的目錄;Program Files表示目標系統的系統磁盤的Program Files目錄,是不允許更改的;Program Files(64-bits)是針對64位系統而言的;Support Folder通常用來存放幫助文檔等;Fonts Folder是指目標系統的系統磁盤的字體文件夾目錄;Windows System表示的是目標系統的系統磁盤的Windows System目錄,如Windows XP的system32目錄,也是不允許更改的;Windows System(64-bits)是針對64位系統而言的。


    OK,認識InstallShield12就先到這里,在下面的內容中,將會跟各位談談InstallScript腳本的編寫等問題。


 


利用InstallScript腳本進行最基本的編程


    在公司負責打包安裝這份日常工作,同時還負責系統或平臺的升級,鑒于公司產品在升級方面要求的特殊性(在B/S上升級C/S程序),本人經過將近一個月的努力,完成了公司產品從最原始的手動升級到半自動化的升級工作,這其中除了需要自己編寫升級程序之外,同時還需要結合升級包做相應的工作。
    在做安裝包或升級包的過程中,很大一部分工作靠InstallScript腳本完成,在這里作簡單的總結。
    首先,想必接觸過InstallShield的朋友都非常清楚,IS有很多的固定函數,這些函數在安裝的不同階段分別執行,比如OnFirstUIBefore、OnFirstUIAfter、OnEnd等。這里需要強調的是,IS函數的執行順序跟顯示順序是無關的,其執行順序是已經固化的。
    我們可以通過腳本來實現安裝界面的增加或減少,比如我們想去掉許可協議界面,那么可以刪掉或注釋掉OnFirstUIBefore函數中的Dlg_SdLicense2:下的這段代碼:
/*
Dlg_SdLicense2:
    szTitle = "";
    szOpt1 = "";
    szOpt2 = "";
    //{{IS_SCRIPT_TAG(License_File_Path)
    szLicenseFile = SUPPORTDIR ^ "License.rtf";
    //}}IS_SCRIPT_TAG(License_File_Path)
    //{{IS_SCRIPT_TAG(Dlg_SdLicense2)
    nResult = SdLicense2Rtf( szTitle, szOpt1, szOpt2, szLicenseFile, bLicenseAccepted );
    //}}IS_SCRIPT_TAG(Dlg_SdLicense2)
    if (nResult = BACK) then
        goto Dlg_SdWelcome;
    else
        bLicenseAccepted = TRUE;
    endif;
*/
    關于各個函數的用法,可以查看InstallShield的幫助文檔,亦可以到網上搜索“InstallShield內部庫函數”,這里不作詳述。
    下面,跟大家分享一些本人在做安裝包和升級包過程中所學習或摸索到的一些小技巧。
(1)檢測操作系統是否為Windows Vista
if (SYSINFO.WINNT.bWinVista) then    
     if (SYSINFO.nOSProductType = VER_NT_WORKSTATION) then  
          // 當前操作系統為Windows Vista
     endif;
endif;


(2)注冊表操作
    讀取注冊表采用RegDBGetKeyValueEx (szKey, szNumName, nType, svvalue, nSize )函數,寫入注冊表采用RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue, nSize)函數,刪除注冊表項采用RegDBDeleteKey ( szSubKey )函數,刪除注冊表項中某一個鍵值采用RegDBDeleteValue ( szSubKey, szValue )函數,等等。所有這些都可以方便地通過InstallShield的幫助文檔找到相應的使用說明。需要說明的是,如果有多個地方需要進行讀注冊表或寫注冊表操作,那么建議將這個方法寫成一個自定義的函數,在需要使用的地方就可以非常方便地調用了。另外,還需要注意的是不要忘了在讀注冊表或寫注冊表等操作之前加上這句RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE),當然也不用每個地方都加,在一個函數體內只需加一個就夠了,而對于特殊情況當然是特殊處理了。


(3)安裝完成前執行指定文件
    通常,在安裝完成之前需要執行指定的文件,如為防止某些文件注冊不成功,采用批處理方式進行再一次的注冊,這時可以寫一個批處理文件*.bat,然后通過如下面的語句執行一下即可:
sProgramme_name = WINSYSDIR ^"\\myReg.bat"; 
szCmdLine = "";
if LaunchAppAndWait(sProgramme_name, szCmdLine, WAIT) < 0 then; 
endif;


(4)隱藏安裝文件復制界面
    可以在OnMoving函數中編寫一行代碼:Disable(STATUSOLD)即可實現。


(5)檢測磁盤空間是否足夠于安裝
    當安裝包非常大時,我們通常要考慮目標計算機的執行磁盤分區是否有足夠的空間來順利完成安裝,在這里可以通過GetDisk (szDir, svDrive)、GetDiskSpace (svDrive)函數進行粗略的估算,如下:
GetDisk (szDir, svDrive);
lFreeSpace = GetDiskSpace (svDrive);   
if (lFreeSpace < 314572800) then
    MessageBoxEx("警告:本安裝所需磁盤空間最低約為300M,安裝路徑所在的磁盤空間不足!請重新選擇!","警告",WARNING);
    goto Dlg_SdAskDestPath;
endif;
上述代碼一般放到OnFirstUIBefore函數的Dlg_SdAskDestPath中。


(6)創建并寫數據到文件
    有時,為適應實際需要,我們需要在安裝過程中創建一個配置文件(如Config.dat),并將一些初始化數據寫入該文件中,這時就需要用到CreateFile函數,例程如下:
    /* 創建配置文件并寫入初始化配置參數 */
    szConfigDir = TARGETDIR ^"\\Test\\Start";
    szConfigPath= TARGETDIR ^"\\Test";
    szConfigFile = "Config.dat";    
    // 以FILE_MODE_APPEND 方式打開文件
    OpenFileMode (FILE_MODE_APPEND);
    // 創建配置文件并打開該文件
    if (CreateFile (nvFileHandle, szConfigDir, szConfigFile) < 0) then
        MessageBox ("創建配置文件失敗,安裝程序將終止!", SEVERE);
        abort;
    else
        // 將配置數據寫入配置文件
        szMsg = "[INIT]\n1="+ szConfigPath;
        if (WriteLine(nvFileHandle, szMsg) < 0) then
            MessageBox ("寫入配置參數失敗,安裝程序將終止!", SEVERE);
            abort;
        endif;
    endif;


    CloseFile (nvFileHandle); //關閉文件


    以上都是一些最基本的腳本代碼,要寫好InstallScript腳本,需要在實際工作學習過程中多鉆研、多去發現。只要用心,有時候還是可以在InstallShield的技術社區找到一些我們想要的東西,并且會時不時地帶給我們一些意外的驚喜。


 


判斷操作系統類型的多種方法


    用InstallShield制作安裝包時,有時候需要判斷操作系統的類型(如Windows XP或者是Windows Vista等),本人通過上InstallShield的官方社區(http://community.flexerasoftware.com/)找到了一些解決辦法,現將本人整理過的方法曬出來,與各位一起分享。


方法一:采用注冊表的方式進行判斷,例程如下:
NUMBER nOS,nvResult;
STRING svOS;


nOS = REGDB_NUMBER;
RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
RegDBGetKeyValueEx( "SOFTWARE//Microsoft//Windows NT//CurrentVersion","CurrentVersion", nOS, svOS, nvResult);
if (svOS == "6.0") then
    MessageBox("We are on Vista!", INFORMATION);
else
    if (svOS == "5.1") then
        MessageBox("We are on XP!",INFORMATION);
    endif;
endif;


方法二:采用GetSystemInfo函數進行處理,請看下面的說明信息:
SYSINFO.nWinMajor
4  The operating system is Windows NT 4.0.  
5  The operating system is Windows Server 2003 R2, Windows Server 2003, Windows   XP,or Windows 2000.  
6  The operating system is Windows Vista or Windows Server 2008.  


SYSINFO.nWinMinor:
 The operating system is Windows Vista, Windows Server 2008, Windows 2000, or Windows NT 4.0.  
1  The operating system is Windows XP.  
2  The operating system is Windows Server 2003 R2, Windows Server 2003, or Windows XP Professional x64 Edition. 


GetSystemInfo(WINMINOR, nvResult, svResult);
GetSystemInfo(WINMAJOR, nvResult, svResult);


方法二可以通過InstallShield的幫助文檔找到更詳細的信息。


方法三:通過SYSINFO.WINNT的方法進行判斷,例程如下:
if (SYSINFO.WINNT.bWinVista) then   
     if (SYSINFO.nOSProductType = VER_NT_WORKSTATION) then 
          // 當前操作系統為Windows Vista
     endif;
endif;
if (SYSINFO.WINNT.bWinXP) then    
    當前操作系統為Windows XP
endif;


上述三種方法是最為常見的解決辦法,當然亦可能還有其他的方法可以進行處理。


 


隱藏準備安裝界面



    使用InstallShield12制作安裝包、升級包的這段時間以來,一直希望能夠在安裝界面上做點工作,使得安裝界面能夠更加符合產品應用的實際需求,不過因為資料少及經驗不足等原因,一直未能如愿。這兩天,在打包過程中,終于發現了一點符合應用的小技巧,特別拿出來分享。


    安裝包、升級包的要求中有這么一條:需要將準備安裝界面隱藏。在查看了InstallShield12的幫助文檔及相關資料后,可以通過設置CommandLine參數順利實現。具體是在Installation Designer->Media->Releases->SINGLE_EXE_IMAGE->Setup Command Line加上/hide_progress即可,如下圖:

    如果要隱藏整個安裝過程,那么將上述的命令改為/s hide_progress即可。
    此外,我們通常希望去掉InstallShield Wizard字樣,本人看過不少資料,亦按照這些資料中所講的方法嘗試過多次,可惜的是均不能完全實現這一點,部分還是可以去掉的,比如在string tables里面將InstallShield Wizard替換成自己想要的文字(如安裝向導),如下圖:

    同時,可以通過Edit指定對話框,對所需要的對話框做適當的修改,比如修改安裝界面左側的圖片等。當然如果修改了對話框,則在我的印象中,對安裝包更換皮膚的話,已修改過的界面將保持修改狀態,而不會跟著更換皮膚。


    由于打包安裝工作純屬本人的日常工作,而非本人的工作重心,所以平時在打包安裝方面所花的時間和精力相對不足,還有不少地方未能花上足夠的時間去深入研究,比如能否根據自己的需求定制每一個安裝界面等,如果哪位朋友有這方面的經驗,不吝賜教。


 


常見系統DLL/OCX控件信息匯集


   利用InstallShield制作安裝包/升級包時,常常需要對控件進行分類,如劃分為系統需要注冊的控件、系統不需要注冊的控件等類別,這就對打包安裝開發人員提出了較高的要求,需要自己去判斷哪些文件需要注冊而哪些文件不需要注冊等等。在這里,結合本人在打包安裝工作中遇到的問題,將一些常見的與系統相關的或第三方DLL/OCX控件信息整理了一下,與各位朋友分享,如果有錯誤之處,歡迎指出。
































































































































































































序號


DLL文件


DLL名稱


描述


屬于


系統DLL


是否需要注冊


安全等級(0-5


1


asycfilt.dll


Microsoft OLE DLL


Microsoft OLE (對象鏈接和嵌入)特性相關DLL文件


OLE




0


2


comcat.dll


Microsoft Component Category Manager Library


Microsoft Component Category Manager Library


Microsoft® Windows® Operating System




0


3


gapi32.dll


Microsoft Mail Configuration Library


微軟郵件協議相關文件


Microsoft Exchange




0


4


msvbvm60.dll


VB Virtual Machine


微軟Microsoft Visual Basic虛擬機相關模塊


Visual Basic




0


5


oleaut32.dll


Microsoft OLE DLL


對象鏈接與嵌入OLE相關文件


Microsoft OLE DLL




0


6


olepro32.dll


Microsoft OLE Property Support DLL


對象鏈接和嵌入OLE特性相關模塊


Microsoft OLE Property Support DLL




0


7


riched32.dll


RichEdit DLL


字符編輯器相關文件


RichEdit




0


8


richtx32.ocx


Microsoft Rich Text OLE Control


微軟Microsoft字符編輯器控制相關程序,用于字符對話框對象高級編輯


Visual Basic




0


9


vb6stkit.dll


Visual Basic Setup Toolkit Library DLL


Visual Basic應用程序接口API相關文件


Visual Basic




0


10


mscomctl.ocx


Windows Common Controls ActiveX Control DLL


公用ActiveX插件控制模塊


Windows ActiveX




0


11


comdlg32.ocx


COMDLG32 OLE Control DLL


一個ActiveX控制模塊,用于通用對話框控制


OLE




0


12


hhctrl.ocx


Microsoft HTML Help Control


Microsoft幫助文檔界面相關文件


Microsoft HTML Help Control




0


13


mscomct2.ocx


Microsoft Common Controls 2 ActiveX Control DLL


ActiveX插件公用管理模塊


Windows ActiveX




0


14


msdxm.ocx


Windows Media Player 2 ActiveX Control


Windows Media Player播放器ActiveX控制相關文件


Windows Media Player




0


15


msscript.ocx


Microsoft Script Control


Visual Basic 6.0應用程序腳本控制的一部分,用于運行時庫


Visual Basic




0


16


mswinsck.ocx


Microsoft Winsock Control DLL


Visual Basic語言的socket編程相關文件


Visual Basic




0


17


sysmon.ocx


Microsoft System Monitor Control


系統性能監視的ActiveX控件


Microsoft Windows




0


18


tabctl32.ocx


TABCTL32 OLE Control DLL


一個ActiveX控制模塊,用于SSTab控制和Tabbed對話框控制


OLE




0


19


tdc.ocx


TDC ActiveX Control


Visual Basic應用程序相關表列數據ActiveX控件模塊


Visual Basic




0


20


wshom.ocx


Windows Script Host Runtime Library


Windows本地腳本對象運行時相關文件


Windows Script Host




0


該文章在 2013/1/17 2:50:41 編輯過

全部評論1

admin
2013年1月17日 2:58

這個功能我找了很久,哈哈,太開心了,謝謝!!

你好,我想向你請教下關于InstallShield12注冊COM組件的問題,我就問下最簡單的:是怎樣注冊COM組件的?

注冊COM組件可以使用Component選項若干選項進行處理,若注冊不成功,你可以自己編寫批處理文件進行再次注冊。具體的你可以看看installshield的官方文檔及官方論壇上的一些提問。http://community.flexerasoftware.com/showthread.php?t=148394

你好,我想請教個問題。如果每次雙擊installshield制作的安裝包都是安裝界面,而不是安裝過后再次雙擊出現的維護/刪除選項界面?謝謝,期待您的回復

不知你的要求是否是這樣:安裝包只提供安裝功能,而無維護卸載功能?如果是,可以通過設置Project菜單中的Settings命令進行設置(因本人久未接觸打包,印象中是該項),通過對工程進行編譯及調試的設置,可以將安裝包設置為每次都是安裝(含覆蓋安裝)。要么通過腳本來控制也是可行的,如修改OnMaintUIBefore()等函數。關于具體的操作細節,請到installshield的官方論壇查閱相關的帖子或幫助文檔。

非常感謝您的回復,我已在研究您說的內容。另外您知道像qq安裝程序那種界面如果用installshield完成么,或者qq安裝程序是否用其他的工作制作完成?謝謝,期待您的回復!

關于類似于QQ的安裝包,本人未曾實現過。不過,鑒于InstallShield的強大,應該是可以做得到的,剩下的只是自己慢慢去研究InstallShield的一些高級技巧罷了(我個人感覺InstallShield在界面處理方面似乎不夠友好,也許是本人未曾深入研究)。另,QQ安裝包貌似是用NullSoft Installation制作的~

我用你的方法,可不進行安裝,文件也不拷貝了,不知道你是怎么解決的,謝謝!!

關于你提到的問題,我想需要更具體地了解你所描述的問題或許才能做出判斷。不知你使用的安裝包類型是什么類型?是Basic MSI Project還是InstallScript MSI Project 或是其他的?如果是InstallScript MSI Project的,應該是不會出現你所說的問題,至少到目前為止我未曾遇到過。

我用的是InstallScript Project,但我用InstallScript MSI Project類型沒Setup Command Line這個選項

InstallScript MSI Project類型的項目本人沒有使用過,不過本人為此找了一份文檔,地址如下:http://kb.flexerasoftware.com/doc/Helpnet/installshield12helplib/IHelpSetup_EXECmdLine.htm,不知對你是否有幫助。你也可以到InstallShield的論壇去找找看,或許會找到更好的幫助。

我怎么沒找到Releases-&gt;SINGLE_EXE_IMAGE這個地方呢?請明示下,謝謝.

你可以在Project Assistant面板的Build Installation中勾選第一項,然后編譯生成單獨的exe,之后即可看到Releases-&gt;SINGLE_EXE_IMAGE了。

正在查找怎樣隱藏準備安裝界面,謝謝。

關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved