在VB中编写ActiveX EXE时,调试运行时,VB自动把注册信息临时性的写入到注册表中.
这个位置在HKEY_CLASSES_ROOT\VBKeySave5或
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VBKeySave5中,里面的信息估计只
有VB能懂
示例如下:
VBKeySave5
0000004b.S01381e94
DeleteCL
{EB21B48D-43F3-401D-BFB8-A0C95E743A37}
DeleteIF
{又一个老长的UUID}
DeletePI
Project1.Class1
0000004b.T0000004
DeleteTI
{再一个不作用未详的UUID}
这样其它组件能生成该Active EXE中的对象.当调试终止时,VB又自动把注册表中的信
息删除了.当ActiveX EXE编译完成时,VB会自动注册,当在目标机器上第一次运行时,
ActiveX EXE自动也将自动注册.当注册后,把该Active EXE文件移动到其他目录位置运行时,
Active EXE并不会"修正"注册表中的注册信息(InprocServer32键中所指的原注册位置)
但当该Active EXE再次运行时,其它的组件却能生成该ActiveX EXE中的对象.对于Active EXE
来说,InprocServer32的意义是当ActiveXEXE没有运行时,客户调用CreateObject能自动找到
该ActiveX EXE组件并加载它以生成对象.
任何ActiveX组件注册时的写入下列信息:
向HKEY_CLASSES_ROOT\CLSID和HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
主键下写入该Active组件中每个COM类的信息,每个类
都有一个CLSID.如:
HKEY_CLASSES_ROOT\CLSID(或HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID)
{EB21B48D-43F3-401D-BFB8-A0C95E743A37}(这是组件类的标识ID,即CLSID)
Implemented Categories
{40FC6ED5-2438-11CF-A3DB-080036F12502}
LocalServer32(在哪个文件中实现的)
ProgID(创建该类对象时所用的"编程名称",如Project1.Class1)
Programmable(是否可编程)
TypeLib(类型库ID,也是一个全局唯一标识符)
VERSION(版本)
HKEY_CLASSES_ROOT(或HKEY_LOCAL_MACHINE\SOFTWARE\Classes)
Project1.Class1
Clsid(即上述的{EB21B48D-43F3-401D-BFB8-A0C95E743A37})
在编译并注册后,还在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib和
HKEY_CLASSES_ROOT\TypeLib下写入代表该ActiveX EXE组件的类型库标识(UUID)