制作VB安裝程序問(wèn)答(一)
制作安裝程序往往是程序設(shè)計(jì)的最后一步,同時(shí)也是重要的一步,因?yàn)檫\(yùn)行安裝程序往往是用戶的第一個(gè)操作。有不少讀者詢問(wèn)這方面的問(wèn)題,《答疑解惑》將分兩期介紹一些制作Visual Basic安裝程序時(shí)常遇到問(wèn)題的解決方法。 問(wèn)題:假如我用VB 5開發(fā)的程序很簡(jiǎn)單,只用到了 ShellExecute()這個(gè)API函數(shù)及Command Button,我能不能不做安裝盤,使其在所有客戶機(jī)上(Win 95/98/NT)都能正常使用?如不制作安裝程序,與EXE放在一起的應(yīng)該包括哪些文件?
答:對(duì)于一個(gè)非常簡(jiǎn)單的VB 5程序,沒有使用額外的OCX控件,在Win 98/2000下是可以正常運(yùn)行的(不需要制作安裝盤)。因?yàn)閃in 98/2000帶有VB 5程序所需要的DLL文件。但在Win 95/NT 4.0下一般是不行的,因?yàn)槿鄙俦匾奈募H绻脩舻臋C(jī)器上安裝有IE 4.0/5.0,那么應(yīng)該也是可以不制作安裝盤的。在一般情況下,不制作安裝盤就不能保證程序的正確運(yùn)行。 你制作的安裝盤所包括的DLL中,除了Vb5stkit.dll只是安裝時(shí)使用、安裝后就不需要了,其它DLL都是不可缺少的。雖然對(duì)于某些機(jī)器而言,由于安裝過(guò)其它軟件,可能不需要某個(gè)DLL,但要想在所有的機(jī)器上都能正確運(yùn)行,一個(gè)文件都不能少。所以為了避免由于缺少某個(gè)文件或注冊(cè)不正確而使程序無(wú)法運(yùn)行,我建議你還是制作安裝盤比較保險(xiǎn)。 如果你的程序是放在網(wǎng)上供別人下載的,為了減少下載文件的大小,可以這樣做:將你的程序單獨(dú)打成一個(gè)包,如果用戶已經(jīng)有了運(yùn)行VB 5程序所需要的有關(guān)文件,就只需下載你的程序;然后,在網(wǎng)頁(yè)上提供一個(gè)VB 5的運(yùn)行時(shí)間庫(kù)的鏈接(如http://download.microsoft.com/download/vb50pro/utility/1/win98/EN-US/Msvbvm50.exe),如果用戶的機(jī)器上沒有這些文件,則讓他單獨(dú)下載運(yùn)行庫(kù)。這是一種比較通行的方法。
問(wèn)題:若在一個(gè)程序中使用了其它控件, 如何在沒有注冊(cè)該控件的機(jī)器上運(yùn)行, 是不是一定要制作安裝程序或注冊(cè)該控件呢? 答:在Win 95/98下,如果你的控件和EXE文件在同一個(gè)目錄中,或者控件文件放置在System目錄中,EXE程序運(yùn)行時(shí)會(huì)自動(dòng)找到所需要的OCX文件并注冊(cè)。但是這種方法在Win NT下不適用,NT下必須先注冊(cè)控件才能保證EXE文件的正常運(yùn)行。另外,這種自動(dòng)注冊(cè)有一些毛病,如果機(jī)器已經(jīng)存在一個(gè)低版本的控件,自動(dòng)注冊(cè)可能會(huì)失敗。所以,如果你希望自己的程序能夠非常好地工作,最好還是制作安裝程序,否則可能會(huì)有麻煩。
問(wèn)題:請(qǐng)介紹一下如何利用VB 6給自己的軟件加上像商業(yè)軟件一樣的卸載功能?
答:VB 6的安裝向?qū)е谱鞯陌惭b程序本身包括卸載功能,不過(guò)這個(gè)功能并不出現(xiàn)在“開始”選單中。安裝后,要進(jìn)行卸載工作,可以打開“控制面板”,點(diǎn)擊“安裝/刪除程序”圖標(biāo),然后選擇想要卸載的軟件。 如果希望在選單中添加卸載程序選項(xiàng),可以在制作安裝程序包時(shí)加入相應(yīng)的程序項(xiàng)。VB 6的“Package & Deployment 向?qū)?#8221;支持安裝程序創(chuàng)建自己的程序組和選單項(xiàng)。在“Package & Deployment 向?qū)?#8221;的“啟動(dòng)選單項(xiàng)”一步(圖1),選擇“新建項(xiàng)”按鈕,此時(shí)會(huì)出現(xiàn)一個(gè)對(duì)話框。在對(duì)話框的 “名稱”文本框中輸入選單項(xiàng)的名稱,如“卸載VBTerm”。在“目標(biāo)”框中輸入卸載項(xiàng)的命令為:$(WinPath)st6unst.exe -n ″$(AppPath)ST6UNST.LOG″ 。然后選擇確定關(guān)閉該對(duì)話框。這樣生成的安裝程序中將包括一個(gè)卸載程序的選單項(xiàng)。 圖1 在啟動(dòng)選單項(xiàng)中添加一個(gè)卸載項(xiàng) 問(wèn)題:本人用VB 6.0制作了一個(gè)程序,但在某個(gè)機(jī)器上安裝時(shí),會(huì)出現(xiàn)以下錯(cuò)誤: 1. “system error &H80004005(02147467259)未指定錯(cuò)誤” 2.“can not found ′c:windows empmsftqws.pdwst6unst.ext′” 3.無(wú)法開始系統(tǒng)安裝程序。 請(qǐng)問(wèn)原因?
答:這是由于VB 6的一個(gè)Bug導(dǎo)致的,你可以升級(jí)到VB 6 SP3(從http://msdn.microsoft.com/vstudio/sp/default.asp下載),在這個(gè)升級(jí)版本中修復(fù)了這個(gè)錯(cuò)誤。
問(wèn)題:本人用VB 6制作了一個(gè)程序,但在安裝該軟件時(shí)系統(tǒng)報(bào)告: 錯(cuò)誤: 在′C:WINDOWSSYSTEMeXPsrv.dll′中未發(fā)現(xiàn)DllRegisterServer() 的WINDOWSSYSTEMexpsrv.dll″輸入點(diǎn);在本操作期間: DllSelfRegister: ″C:;錯(cuò)誤: 注冊(cè)文件 ′C:WINDOWSSYSTEMexpsrv.dll′時(shí)出錯(cuò);錯(cuò)誤: (用戶響應(yīng)′忽略′)。 忽略錯(cuò)誤后安裝完成。在Windows 98下安裝也有同樣的問(wèn)題。
答:DLL有兩種,一種是標(biāo)準(zhǔn)DLL,另一種是ActiveX DLL。前者拷貝到用戶機(jī)器上就可以工作了,而后者還需要調(diào)用DLL中的DllRegisterServer或者使用RegSvr32進(jìn)行注冊(cè)才能使用。你可以打開VB98WizardsPDWizardVB6dep.ini文件。下面是這個(gè)文件的片斷: [ExpSrv.dll] Dest=$(WinSysPathSysFile) CABFileName=MSJet35.cab CABDefaultURL=http://activex.microsoft.com/controls/vb6 CABINFFile=MSJet35.inf [MSRD2x35.dll] Dest=$(WinSysPathSysFile) Register=$(DLLSelfRegister) CABFileName=MSJet35.cab CABDefaultURL=http://activex.microsoft.com/controls/vb6 CABINFFile=MSJet35.inf
可以看到MSRD2x35.dll比ExpSrv.dll多一行Register=$(DLLSelfRegister),這是因?yàn)镸SRD2x35.dll是ActiveX DLL。ExpSrv.dll是普通的DLL,沒有DllRegisterServer,也用不著注冊(cè)。你所遇到的問(wèn)題是VB 6的一個(gè)Bug(在VB 6 SP3中已經(jīng)修復(fù))。如果你的VB6dep.ini文件的ExpSrv.dll多了Register一行,應(yīng)該刪除。或者打開安裝程序的Setup.lst,刪除其中ExpSrv.dll一行中的“$(DLLSelfRegister)”字樣。
問(wèn)題:我在做成安裝文件后,安裝過(guò)程中系統(tǒng)缺省的目錄是C:Program FilesTele,而我需要的是C:Tele2000,請(qǐng)問(wèn)有辦法修改嗎?
答:要修改安裝程序的缺省目錄,可以打開安裝盤的Setup.lst文件,在這個(gè)文件中可以找到下面一行: DefaultDir=$(ProgramFiles) ele 將這行中的“$(ProgramFiles) ele”修改為你想要的目錄(如C:Tele2000)就可以了。
問(wèn)題:用VB 5的安裝向?qū)е谱鞯某绦虬惭b包里,總有一個(gè).dep文件,請(qǐng)問(wèn)這個(gè)文件有什么用?是否與OCX注冊(cè)有關(guān)?如何打開?如何編輯?
答:只有當(dāng)你為ActiveX控件制作安裝包的時(shí)候,才會(huì)出現(xiàn).dep文件。這個(gè)文件主要是供使用你的ActiveX控件的程序設(shè)計(jì)者制作他自己程序的安裝盤時(shí)使用的。你的用戶在使用Setup Wizard制作安裝盤時(shí),Setup Wizard會(huì)讀取這個(gè)文件,檢查你的ActiveX控件需要哪些DLL支持。一般不用手工修改這個(gè)文件,如果你認(rèn)為確有必要,可以使用記事本打開修改。
問(wèn)題:我用VB+Access開發(fā)數(shù)據(jù)庫(kù)系統(tǒng)。但到發(fā)布時(shí)用VB自已的發(fā)布向?qū)r(shí),我程序目錄中的子目錄的文件卻加入不正常,向?qū)Р话醋幽夸泤^(qū)分,而是將所有文件都加到程序目錄中。怎么辦?
答: VB的安裝向?qū)侵С种谱靼ㄗ幽夸浀陌惭b程序的。運(yùn)行安裝向?qū)У?#8220;文件小節(jié)”一步,在對(duì)話框中選擇“添加”按鈕,然后選擇應(yīng)該放置在子目錄中的文件添加到文件列表中。 然后從文件列表中選擇該文件,點(diǎn)擊 “文件詳細(xì)資料”按鈕。在圖3所示對(duì)話框中設(shè)置目標(biāo)路徑。最好不要用絕對(duì)路徑(如C:MyProject)來(lái)指定安裝位置,這樣會(huì)給用戶帶來(lái)不便。安裝向?qū)褂煤陙?lái)指示文件要安裝的位置。這些宏只在安裝程序中有效。宏的含義參見表1。如果要將文件放置在應(yīng)用程序目錄下的Data子目錄下,可以使用$(AppPath)Data來(lái)指定安裝路徑。 問(wèn)題:安裝時(shí),用VB自己的“展開與打包向?qū)?#8221;制作的安裝盤,不知道怎么讓程序在桌面上放一個(gè)快捷方式?
答:VB“展開與打包向?qū)?#8221;所生成的安裝程序的工作步驟是這樣的:先運(yùn)行Setup.exe,這個(gè)程序?qū)B的運(yùn)行庫(kù)安裝到用戶的機(jī)器上,同時(shí)將.cab文件中的文件釋放到臨時(shí)目錄中,然后再調(diào)用臨時(shí)目錄中Setup1.exe完成余下的安裝工作。Setup1.exe是由VB寫的(正是這個(gè)原因所以要先安裝VB的運(yùn)行庫(kù)),其源程序可以在VB98WizardsPDWizardSetup1中找到。如果你對(duì)VB的安裝程序不滿意,希望添加新功能,可以直接修改Setup1.vbp。具體到你的問(wèn)題,在VB中可以打開Setup1.vbp,然后修改Setup1.frm的Form—Load事件,在其中可以找到如下幾行: ′ ′ Create program icons (or links, i.e. shortcuts). ′ If (fMainGroupWasCreated = True) Or ((cIcons > 0) And TreatAsWin95()) Then ShowStaticMessageDialog ResolveResString(resPROGMAN) CreateIcons gsICONGROUP ′Do the same for other sections in SETUP.LST if you′ve added your own. ′CreateIcons ″MySection″ ′CreateIcons ″MyOtherSection″ End If 在If.. End If中加上: OSfCreateShellLink ″....Desktop″, _ ″我的程序″, gstrDIR—DEST+″MyProg.exe″, ″ ″ 重新編譯Setup1.vbp,用Setup1.exe替換掉原來(lái)的Setup1.exe即可。
問(wèn)題:我用VB 5.0安裝向?qū)傻陌惭b程序,安裝到最后時(shí)總是顯示“文件C:WindowsSystem$(DllSelfRegisterEx)不能被注冊(cè),由于它未找到”的提示信息后安裝失敗,請(qǐng)問(wèn)原因?
答:這是VB 5.0/6.0的一個(gè)Bug。 如果運(yùn)行Visual Basic 5.0生成的安裝盤,會(huì)產(chǎn)生下面的錯(cuò)誤: The file ′ 如果運(yùn)行Visual Basic 6.0生成的安裝盤,會(huì)產(chǎn)生下面的錯(cuò)誤: The file ′ 這個(gè)問(wèn)題發(fā)生在分發(fā)Microsoft Calendar control(MSCal.ocx)時(shí)。MSCal.dep文件中的"Register="行被錯(cuò)誤地設(shè)置成 $(DLLSelfRegisterEx)了。 解決辦法如下: 1. 使用記事本打開Setup.lst文件。Setup.lst文件是Setup Wizard或PDW制作安裝盤時(shí)生成的。 2. 查找$(DLLSelfRegisterEx)。你將看到在MSCal.ocx的一行中有$(DLLSelfRegisterEx)。 3. 修改 $(DLLSelfRegisterEx) 為$(DLLSelfRegister)。 4. 關(guān)閉記事本并保存文件。 5.運(yùn)行Setup.exe。 如果希望今后生成的Setup.exe都不出這樣的錯(cuò)誤,可以這樣做: 1. 使用記事本打開MSCal.dep文件。你可以在MSCal.ocx所在的目錄(通常是Windows 95/98的WindowsSystem或Windows NT的WinntSystem32)找到MSCal.dep文件。 2. 查找$(DLLSelfRegisterEx)。你將可以在“Register=”一行看到$(DLLSelfRegisterEx)。 3. 修改 $(DLLSelfRegisterEx) 為$(DLLSelfRegister)。 4. 關(guān)閉記事本并保存文件。 |
|
來(lái)自: a_cheng > 《VB學(xué)習(xí)》