我有一个适用于32位和64位架构的COM可视dll,用于将菜单项添加到Windows资源管理器上下文菜单中。使用“regasm myassembly.dll / codebase”我注册了dll并看到了新的菜单项。大。取消注册也可以。
现在我想创建一个.reg文件,以便将菜单项添加到非开发机器中。我使用“regasm myassembly.dll / codebase / regfile”生成一个reg文件,我可以用regedit导入。问题是,导入.reg后,我看不到菜单图标。为什么注册失败了?注意我在64位系统上。
答案 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文件不会包含这些键,因为自定义注册功能需要运行代码。