5

我有一个为 com interop 注册的 dll,因此在 HKLM\Software\Classes\CLSID[my guid]\InprocServer32[my version no]\Codebase 下它具有注册 dll 的路径。但是,我重新排列了我的文件夹结构,使路径不再正确。有没有办法注销该dll而不将其放回原处,然后注销,然后再次删除文件?

如果我不再有那个 dll,或者只有一个版本号不同的 dll,该怎么办?

4

3 回答 3

2

不同的版本号(通常)无关紧要。只要较新的 DLL 包含旧版本中出现的所有 GUID,它就会被正确地注销(使用带有 regasm、exe 的新 DLL)。当然,为 COM 互操作重新注册程序集将正确地重新定位必要的注册表项。

于 2009-01-18T21:07:19.063 回答
1

据我所知 - 您只需在新位置注册 DLL。
您可以使用 MS 工具oleview.exe来验证 COM 注册点是否指向正确的位置。

于 2009-01-18T20:56:58.927 回答
0

我们在注册新 dll 时遇到的问题是,它的版本比之前注册的版本低。你最终在注册表中得到了这个:

HKCR\MyLib.MyClass\CLSID:(Default)=<my guid>

and 

HKCR\CLSID\<my guid>:Assembly=<string containing version number> 

and 

HKCR\CLSID\<my guid>\InprocServer32\<version number>\ ... more details

我认为运行时会尝试加载 中标识的程序集HKCR\CLSID\<my guid>:Assembly,因此您希望尽可能取消注册该程序集。

这不是关于如何取消注册的答案,但是如果您无法取消注册,我发现进入那里并删除您不再拥有的版本号的密钥很有用,并且可能Assembly手动更新值如果你敢。

于 2011-05-20T10:59:06.130 回答