我有一个为 com interop 注册的 dll,因此在 HKLM\Software\Classes\CLSID[my guid]\InprocServer32[my version no]\Codebase 下它具有注册 dll 的路径。但是,我重新排列了我的文件夹结构,使路径不再正确。有没有办法注销该dll而不将其放回原处,然后注销,然后再次删除文件?
如果我不再有那个 dll,或者只有一个版本号不同的 dll,该怎么办?
我有一个为 com interop 注册的 dll,因此在 HKLM\Software\Classes\CLSID[my guid]\InprocServer32[my version no]\Codebase 下它具有注册 dll 的路径。但是,我重新排列了我的文件夹结构,使路径不再正确。有没有办法注销该dll而不将其放回原处,然后注销,然后再次删除文件?
如果我不再有那个 dll,或者只有一个版本号不同的 dll,该怎么办?
不同的版本号(通常)无关紧要。只要较新的 DLL 包含旧版本中出现的所有 GUID,它就会被正确地注销(使用带有 regasm、exe 的新 DLL)。当然,为 COM 互操作重新注册程序集将正确地重新定位必要的注册表项。
据我所知 - 您只需在新位置注册 DLL。
您可以使用 MS 工具oleview.exe来验证 COM 注册点是否指向正确的位置。
我们在注册新 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
手动更新值如果你敢。