dll自动注册出现的诡异现象

Iamclq 2009-12-20 12:16:04
我写了一个COM,然后在注册时在注册表中写入一些东西,包括dll所在的位置。

procedure TMyFactory.UpdateRegistry(Register: Boolean);
var
dllpath: array[0..1023] of char;
begin
inherited UpdateRegistry(Register);

GetModuleFileName(HInstance, dllpath, SizeOf(dllpath));
ShowMessage(dllpath); // 这里显示的是实际运行的dll路径
CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID), '', 'My');
CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID) + '\InProcServer32', '', dllpath);
// 注册表里显示的却是dll的编译路径,上面传进去的参数也是实际运行的路径,真的是太奇怪了?
CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID) + '\InProcServer32', 'ThreadingModel', 'Apartment');

end;


而且将编译的dll文件复制到其他电脑上,也是dll编译时的路径,太郁闷了?
...全文
130 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yumenyoudian 2009-12-24
  • 打赏
  • 举报
回复
regsvr32调用了DllRegisterServer方法注册的,DllRegisterServer最终还是调了UpdateRegistry方法的,你可以看看ComServ单元DllRegisterServer的实现。
从你描述的情况确实很难断定问题出在哪里,我也不能妄加猜测,你可以写一些日志来跟踪这个流程。
Iamclq 2009-12-23
  • 打赏
  • 举报
回复
这个问题咋没有回答呢?
Iamclq 2009-12-21
  • 打赏
  • 举报
回复
我是指运行 regsvr32注册dll时,如果把更新注册表的语句删除后,注册表里仍然会注册进一些信息,不知是哪里自动注册的?
gyk120 2009-12-21
  • 打赏
  • 举报
回复
regsvr32除非调用它,否则不会自动注册的
Iamclq 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yumenyoudian 的回复:]
自动注册,是用Regsvr32.Exe吧?
[/Quote]
难道是 regsvr32 在自动注册?
Iamclq 2009-12-21
  • 打赏
  • 举报
回复
对,是用 regsvr32 注册的
Iamclq 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 starluck 的回复:]
看工程的入口处
[/Quote]

没找到
yumenyoudian 2009-12-20
  • 打赏
  • 举报
回复
自动注册,是用Regsvr32.Exe吧?
starluck 2009-12-20
  • 打赏
  • 举报
回复
看工程的入口处
Iamclq 2009-12-20
  • 打赏
  • 举报
回复
下午又试了一下,如果把方法中的语句全部注释掉,系统仍然会注册成功,不知是从何处注册的?

procedure TMyFactory.UpdateRegistry(Register: Boolean);
var
dllpath: array[0..1023] of char;
begin
// inherited UpdateRegistry(Register);

// GetModuleFileName(HInstance, dllpath, SizeOf(dllpath));
// ShowMessage(dllpath); // 这里显示的是实际运行的dll路径
// CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID), '', 'My');
// CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID) + '\InProcServer32', '', dllpath);
// 注册表里显示的却是dll的编译路径,上面传进去的参数也是实际运行的路径,真的是太奇怪了?
// CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID) + '\InProcServer32', 'ThreadingModel', 'Apartment');

end;

全部注释后仍然也会自动注册

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧