2013-04-05 57 views
1

我有一个COM可见的DLL适用于32位和64位体系结构,我用它来添加一个菜单项到Windows资源管理器上下文菜单。使用“regasm myassembly.dll/codebase”我注册该DLL并看到新的菜单项。大。取消注册也可以正常工作。regasm/codebase的作品,但与regasm/codebase/regfile生成的文件不

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

+1

大概是一个64/32位的东西,另请参见http://stackoverflow.com/questions/8172392/regasm-regfile-switch-not-giving-same-output-as-codebase-switch – AardVark71 2013-04-05 13:07:38

+0

我认为这很可能案子。在注册regasm之后,我将不得不查看注册表,然后在使用.reg之后查看差异。 – Coder1095 2013-04-05 15:13:01

回答

2

注册一个shell扩展需要编写比注册一个[ComVisible] .NET程序集通常需要的更多的注册表项。
您还必须使用Explorer读取的write the keys来发现扩展。
您完全没有提及您是如何照顾的,通常需要自定义[ComRegisterFunction]。但是,由于自定义注册函数需要运行代码,因此.reg文件不会包含这些键。

+0

感谢您的输入。我正在使用[SharpShell](http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus)来处理恶意工作,所以我只需要注册com可见在这种情况下组装。 – Coder1095 2013-04-05 14:53:23

+0

是的,它有一个[ComRegisterFunction]。显然,你不会得到它在你的.reg文件中写入的密钥。 – 2013-04-05 15:27:12

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)。

+0

感谢您的信息。还有一些关于这个[这里]的文章(http://sharpshell.codeplex.com/wikipage?title=Managed%20Shell%20Extensions&referringTitle=Documentation),并不是所有这些都忽略了这个想法。 reg文件由regasm自己生成,应该简单地复制工具对注册表所做的更改。也不需要将dll添加到GAC,因为“/ codebase”标志将dll的位置存储在注册表中。这是说我会看看替代品,因为这证明是麻烦的。 – Coder1095 2013-04-05 15:05:38

+1

@Matt,谢谢你指出这个链接。对于明显相互矛盾的观点,这是一个有趣的总结。显然这个人做了大量的研究。就我个人而言,我必须服从MS的官方指导 - 这是官方的理由 - 以及Raymond Chen的立场,我对此深表敬意。也许我可以从我的帖子中撤回其中一个“真正”,作为妥协:-) – 2013-04-06 03:09:10

相关问题