1

我有一个适用于 32 位和 64 位架构的 COM 可见 dll,我用它来将菜单项添加到 Windows 资源管理器上下文菜单中。使用“regasm myassembly.dll /codebase”注册 dll 并查看新菜单项。伟大的。注销也可以正常工作。

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

4

2 回答 2

2

你应该知道这是一个非常非常糟糕的主意。请阅读有关该主题的经典帖子。

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 与 x64)上放置不同的信息。

于 2013-04-05T14:00:11.867 回答
2

注册 shell 扩展需要编写比注册[ComVisible].NET 程序集通常所需的更多的注册表项。
您还必须编写 Explorer 读取的密钥以发现扩展。
您根本没有提到您是如何处理的,这通常需要自定义[ComRegisterFunction]. 但可以肯定的是,.reg 文件不会包含这些密钥,因为自定义注册功能需要运行代码。

于 2013-04-05T14:07:02.343 回答