Regasm /codebase工作,但用Regasm /codebase /regfile生成的文件不工作

本文关键字:Regasm 工作 codebase 文件 但用 regfile | 更新日期: 2023-09-27 18:07:41

我有一个适合32位和64位体系结构的COM可见dll,我用它来向windows资源管理器上下文菜单添加菜单项。使用"regasm myassembly.dll/codebase",我注册dll并看到新的菜单项。太好了。取消注册也可以。

现在我想创建一个.reg文件,这样我就可以将菜单项添加到非开发机器。我使用"regasm myassembly.dll/codebase/regfile",生成一个我可以用regedit导入的regg文件。问题是,导入.reg后,我看不到菜单图标。为什么可能会注册失败?注意我使用的是64位系统

Regasm /codebase工作,但用Regasm /codebase /regfile生成的文件不工作

注册一个shell扩展需要编写比注册[ComVisible] . net程序集更多的注册表项。
您还必须编写资源管理器读取以发现扩展的键。
你根本没有提到你是如何处理的,这通常需要一个自定义的[ComRegisterFunction]。但是可以肯定的是,.reg文件不会包含这些键,因为自定义注册函数需要运行代码。

你应该知道这是一个非常非常糟糕的主意。请阅读这篇关于这个主题的经典文章。

http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx

然后这个最近的更新:

http://blogs.msdn.com/b/oldnewthing/archive/2013/02/22/10396079.aspx

即使您坚持要这样做(或者如果程序集的目的不是用于外接程序),尝试使用.reg文件来注册程序集仍然是一个坏主意。

除了COM注册之外,还需要发生更多的事情才能使程序集工作。最有可能的是,您必须将其添加到GAC中,以便。net可以找到它。此外,. net的未来版本可能需要在注册表中添加更多信息,或者不同的信息。即使在今天(我怀疑),REGASM可能需要在不同的环境(x86 vs. x64)上放置不同的信息。