activex控件的更新后,每次新下载都生成一个Conflict.X文件夹,是漏掉了哪个版本定义导致的?
在微软论坛上找到一个解释:http://support.microsoft.com/kb/196150
=================================
有某些情况下,在过程中的代码 (通常与安装 ActiveX 控件在 <object>标记中引用相关) 下载已下载的程序文件文件夹中创建一个冲突子目录的位置。 在创建它后,冲突目录用作文件安装在目标目录。
Internet Explorer 执行所有已下载的文件与 ActiveX 控件 (基本上,列出的所有文件 [Add.Code] 部分中) 相关联的以下的检查:
已下载的程序文件已经处于相同名称的文件吗?
是不同于以前安装,导致下载此文件的主要组件 (从 <object>标记) 的 CLSID。
下列选项之一:
文件本身具有不 CLSID。
文件本身具有主 CLSID,但它不同于已下载程序文件中已存在的文件的 CLSID。
如果所有三个问题回答为是的任何一个文件,一个唯一的子目录创建其中.x 是唯一的数字的命名的 CONFLICT.x。冲突的目录中安装了应该出现在已下载的程序文件文件夹中的 [Add.Code] 部分中的所有文件。
==================================
但是我不清楚这个“文件主CLSID”是指什么?我是用ATL写的,在主模块类里已经声明了APPID,并且.rgs文件里也写了AppID键的注册脚本:
class CFSWebPlayerModule : public CAtlDllModuleT< CFSWebPlayerModule >
{
public :
DECLARE_LIBID(LIBID_FSWebPlayerLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SERVER,"{B79598A8-E195-4f0c-9EB1-ADF5A2F561E7}")
};
HKCR
{
NoRemove AppID
{
'%APPID%' = s 'FSWebPlayer'
'FSWebPlayer.DLL'
{
val AppID = s '%APPID%'
}
}
}
并且注册后也看到这些信息确实写进了注册表里。但我按以下方式试验“重装”该控件时,还是导致冲突产生那个Conflict文件夹:
1、去注册表CLSID下面把我的COM类删掉
2、重新打开网页,又会提示是否要安装activex控件
3、装好后,c:\windows\download program files下面就多了个Conflict.x文件夹
按理说同样的dll文件,clsid也没变,重装的话直接覆盖或者完全不变就对了,为什么会产生这种冲突呢?