Posted on 2008-10-23 14:16
巴西木 阅读(4338)
评论(14) 编辑 收藏 引用 所属分类:
InstallShield
有个VB做的WebService客户端程序,一直是需要安装SOAP Toolkit 3.0后才能使用,所以客户需要安装两个安装包,一个是我这个程序,一个是SOAP Toolkit 3.0。
昨天终于下决心抽空研究怎么合并打包程序了,经历是曲折的:
1. 从微软官方下载到了soapsdk的再分发包:STK3Redist.EXE
2. 解压后发现里面是几个. msm文件(isapi3_files.msm,soap3_core.msm,winhttp51.msm)
3. 上网搜索 .msm文件的使用方法,结果有人说用installshield可以打开,打开后,看到里面有mssoap30.dll等文件, 可是打开后无法导出,只能合并到别的msm文件或msi文件中,试着合并到自己程序的msi文件中,提示出错,合并失败,并无错误描述。
4. 于是开始研究提取msm文件中的文件,将msm文件导出到一个空的msi文件中,然后试了两个提取msi文件的软件(Universal Extractor和MSI文件提取器0.66)均提取失败。
5. 无意中搜到《打包SOAP 》这篇文章,其中的内容起了决定性作用:
1.将msm文件拷贝到InstallShield安装目录下的Objects文件夹下,例如:Macrovision\IS11.5\Objects
2.在InstallShield下,将相应的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的包,结果用msxml4.0就解决了,每用上)
9.打包测试
10.成功!
总结:
首先,对于使用了soapToolkit3.0的客户端程序,必须注册需要的dll文件。
有人说只需要注册几个dll文件(MSSOAP30.DLL,MSSOAPR3.DLL ,WISC30.dll ),没有精力去追究是不是这样了,而且这几个文件也不再同一个msm文件中,所以我把三个msm文件都加进去。
也有人说手动注册,但是对于安装程序来说,手动不再考虑之列。
然后,msm文件可以合并到别的msm文件或msi文件中。
虽然我没有试验成功,但msm文件的初衷大概就是为了模块化分发的,主要用于微软的msi安装包的制作。
其次,installshiel是可以将msm文件为我所用的
启发来自《打包SOAP》这篇文章
最后,对安装程序的测试一定要在空的操作系统上测试,不然,受到开发环境的影响,有些问题很难发现。
制作期间也遇到了一些别的问题,大多数是需要的文件没有打在包里,就像vb里面的richtext.ocx和msflxgrd.ocx,有些文件是可以在installshield中的Redistributables选取的,在Redistributables里没有提供的就得自己把文件加进去。