有個VB做的WebService客戶端程序,一直是需要安裝SOAP Toolkit 3.0后才能使用,所以客戶需要安裝兩個安裝包,一個是我這個程序,一個是SOAP Toolkit 3.0。
昨天終于下決心抽空研究怎么合并打包程序了,經(jīng)歷是曲折的:
1. 從微軟官方下載到了soapsdk的再分發(fā)包:STK3Redist.EXE
2. 解壓后發(fā)現(xiàn)里面是幾個. msm文件(isapi3_files.msm,soap3_core.msm,winhttp51.msm)
3. 上網(wǎng)搜索 .msm文件的使用方法,結(jié)果有人說用installshield可以打開,打開后,看到里面有mssoap30.dll等文件, 可是打開后無法導(dǎo)出,只能合并到別的msm文件或msi文件中,試著合并到自己程序的msi文件中,提示出錯,合并失敗,并無錯誤描述。
4. 于是開始研究提取msm文件中的文件,將msm文件導(dǎo)出到一個空的msi文件中,然后試了兩個提取msi文件的軟件(Universal Extractor和MSI文件提取器0.66)均提取失敗。
5. 無意中搜到《打包SOAP 》這篇文章,其中的內(nèi)容起了決定性作用:
 1.將msm文件拷貝到InstallShield安裝目錄下的Objects文件夾下,例如:Macrovision\IS11.5\Objects   2.在InstallShield下,將相應(yīng)的msm合并模塊從上面的InstallShield objects/Redistributables選中( SOAP SDK Files ,SOAP SDK ISAPI Files和WinHTTP QFE Installer ) 原來msm文件是這樣用的呀
6. 選中打包以后,安裝測試,暈,依然報錯:WSDLReader: Loading of the WSDL file failed HRESULT=0x80040154: Class not registered.(沒有注冊類別) 7. google上搜索這個錯誤,遇到了這篇文章KBAlertz.com: Error message when you try to access a Web service that is hosted on IIS: HRESULT=0x80040154 其中講到的一種情況與我這種情況一致:
 You include the redistributable files from the Microsoft SOAP Toolkit 3.0 in the client program installation package. 三種解決辦法中我用的是:
 Method 3: Install Microsoft XML Core Services 4.0 Service Pack 2  8.于是我在installshield中選入了msxml4.0(本來也找好了MSXML4.0 SP2的包,結(jié)果用msxml4.0就解決了,每用上)
9.打包測試
10.成功!
總結(jié): 首先,對于使用了soapToolkit3.0的客戶端程序,必須注冊需要的dll文件。 有人說只需要注冊幾個dll文件(MSSOAP30.DLL,MSSOAPR3.DLL ,WISC30.dll ),沒有精力去追究是不是這樣了,而且這幾個文件也不再同一個msm文件中,所以我把三個msm文件都加進(jìn)去。 也有人說手動注冊,但是對于安裝程序來說,手動不再考慮之列。
然后,msm文件可以合并到別的msm文件或msi文件中。 雖然我沒有試驗(yàn)成功,但msm文件的初衷大概就是為了模塊化分發(fā)的,主要用于微軟的msi安裝包的制作。
其次,installshiel是可以將msm文件為我所用的 啟發(fā)來自《打包SOAP》這篇文章
最后,對安裝程序的測試一定要在空的操作系統(tǒng)上測試,不然,受到開發(fā)環(huán)境的影響,有些問題很難發(fā)現(xiàn)。 制作期間也遇到了一些別的問題,大多數(shù)是需要的文件沒有打在包里,就像vb里面的richtext.ocx和msflxgrd.ocx,有些文件是可以在installshield中的Redistributables選取的,在Redistributables里沒有提供的就得自己把文件加進(jìn)去。
|