第三方案
a.system32
b.E:/dll
c.当前工程的bin/com下面
a.system32(default,安装,没有约定)
b.约定,统一管理
c.约定,当前应程序程序,统一管理,上传,缺点:开发人员,不方便系统管理人员,com系统级的,同一个com,guid不可能注册两次,否则只有最后一次的才生效
为了统一,最后决定采用第二种解决方案
解决的问题点:
1.上传(/projects/lymdcTemp/dll/)
2.开发时的分发问题(E;/dll)
3.说明,e:/dll下需要说明
注册是动态注册,也可del,但如果是服务则不可以删除,因为在动态执行regsvr32.exe
将用的方式
set objwebpay=server.CreateObject("travelonline.webpay")
set conn=server.createobject("ADODB.Connection")
都是从注册表中动态查找路径,然后调用该路径下dll中的方法
有时注册了新了com需要重启服务,原因是有cache,加速
注册表来记录dll的关联,
使用名称来进行调用,最好是使用clsid,这样才不会出错,
升级版本使用相同的CLSID,才导致dllhell,必须不向前兼容.
.net,应用程序自已的文件夹,公用的使用GAC文件夹,即使是使用GAC,都加多了一个版本信息,及安全信息公钥,
对于.net组件的GUID,是给com用的.
COM通常建议同一个组件的升级版本使用相同的CLSID, 所以会有Dll Hell。
.NET组件没有是因为使用编译器和CLR加强版本机制,强制加载编译期间使用的相关程序集。
DLL Hell DLL地狱
Windows系统是以Dynamic Link Library(动态链接库)的方式让系统和应用软件共用所有的系统文件的。
DLL Hell的意思就是因为系统文件被覆盖而让整个系统像是掉进了地狱(什么软件都不能运行了)。