regasm / codebase有效,但用regasm / codebase / regfile生成的文件没有

时间:2013-04-05 12:48:05

标签: c# com regasm regedit

我有一个适用于32位和64位架构的COM可视dll,用于将菜单项添加到Windows资源管理器上下文菜单中。使用“regasm myassembly.dll / codebase”我注册了dll并看到了新的菜单项。大。取消注册也可以。

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

2 个答案:

答案 0 :(得分: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文件注册程序集仍然是一个坏主意。< / p>

除了COM注册以使程序集正常工作之外,还需要做更多的事情。很可能你必须将它添加到GAC,以便.NET可以找到它。此外,.NET的未来版本可能需要在注册表中添加更多信息或不同信息。即使在今天(我怀疑),REGASM可能需要在不同的环境中提供不同的信息(x86与x64)。

答案 1 :(得分:2)

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