关于COM服务器对象版本的问题?
如果系统中已经有一个已注册的COM对象包 1.dll(新版本),已经存在于系统A目录中,而如果某安装程序中有一个低版本的1.dll(旧版本),并且进行软件安装,安装在B目录下,在安装过程中这个旧版本的DLL能向系统注册吗?当客户端程序调用1.dll的COM服务器对象时,是使用的A目录下的1.dll还是B目录下的1.dll ?
[解决办法]
这要看安装程序了,它是否能检测出程序的版本新旧,并且是否给你覆盖/保留的选择。
[解决办法]
最好先注销掉旧版本的组件在安装新的进行注册
[解决办法]
对于VB子代的打包程序有时候感觉不是很好用,我通常是用它打一次包,然
后将包里的相关文件复制出来再用些专业的安装程序制作软件打包。
通常比较专业的安装程序制作软件,都会有脚本支持,在安装程序的脚本中
可以做识别组件的版本并根据情况对其进行处理。当然需要稍微琢磨一下你
使用的安装程序脚本,虽然不是很难懂,但也要花点时间去了解。
其实VB程序在Win98以上系统如果只使用VB的基本控件,没有引用什么外部
组件和其他需要添加的控件,完全可以独立运行。如果用VB程序本身来做组
件安装注册组件这一块也是很容易的,大可以在安装程序里先释放你的VB程
序和相关的文件到一个临时目录中,然后运行你用VB写的安装程序,无非就
是读取注册表,然后判断是否取消注销操作,然后调用regsvr32来注销或注
册你的组件,如果做得完善点,还可以检测你的程序或NT服务程序是否在运行,
如果在运行通过消息、DDE或网络的方式通知你的程序让其自行安全关闭,然
后再进行处理。用到的也就是些注册表、文件、Shell操作。
至于那种做法,看你的个人爱好了,喜欢直接用安装程序的脚本或用VB程序或
是批处理程序都可以,根据需求而定。
如果想在VB里做,涉及的东西不多,可以参考下面的东西
注册组件可以
Shell "regsvr32 你的组件路径 /s"
注销可以:
Shell "regsvr32 你的组件路径 /u /s"
复制文件可以用:
filecopy
删除文件可以用:
kill
读写注册表可以参考:
http://topic.csdn.net/u/20100311/16/1ccd9381-d566-4e49-ab6f-33c260ff4cf2.html
[解决办法]
如果两个dll的接口一致,会使用最后一次注册的Dll文件,其实这点你可以不必担心的。
[解决办法]
打包工具有关于存在文件颁布的检测选项,你可以选择:提示、覆盖、不覆盖等选项。
[解决办法]
我就见过相同名称的几个不同版本类的状况,所以先注销比较好