2010-09-08 95 views
14

我试图创建在C++中使用Visual Studio 2010的太简单了外壳扩展,但我甚至不能似乎得到的例子在那里为起点的工作。在Visual Studio中制作一个Windows外壳扩展2010

我正在使用Windows 7 x64。

我试过this Visual Studio template,但一旦我得到模板在VS2010中工作,我有一系列错误,我不知道如何解决。

我试过The Complete Idiot's Guide to Writing Shell Extensions,一旦演示编译所有正确的注册表设置等创建,但似乎没有上下文菜单。

我已经看了this C# COM Interop example,但我已经离开了困惑,是否可以安全使用C#感谢this article *,但它看起来像如果我使用.NET 4中,因为it supports in process side-by-side CLR hosting我可能会确定。

  • 简而言之:历史上两个版本的.NET不能在同一个进程中运行,并且shell扩展的工作方式是将自己注入进程。因此,如果.NET 3.5被注入.NET 2进程 -

那么,我现在可以使用.NET 4.0吗?

是否有一个工作的,可下载的VS2010解决方案,添加了一个简单的shell扩展?

我以前在C++回来的时候并不是那么糟糕,但是经过多年的模拟.NET之后,我很生疏,因此,摆弄细节以解决我遇到的大量错误在现有的例子证明...... fiddly!

我真的可以做一个干净的石板开始,我可以打破自己,并找出什么做错了!

+0

是的,您现在可以使用.NET 4.0。并行的并行过程非常明确地被发明来支持这种用法。 – 2010-09-08 19:24:39

+0

@Hans - .NET 4将会注入到.NET 2中,并且所有的都会存活下来? – joshcomley 2010-09-08 19:38:10

+0

并排,不注射。 – 2010-09-08 19:42:52

回答

7

我这个挣扎了一会儿,限制了与代码项目的文章的成功是由于64位的问题和SDK的差异。

最近,我选择了项目向上追溯,并开始在使用MS all-in-one代码示例,我感到非常高兴。它使一个简单的例子,上下文菜单和x64开箱的:http://code.msdn.microsoft.com/windowsdesktop/CppShellExtContextMenuHandl-410a709a

为了得到它运行你的机器上:

  1. 将通过所有功能于一身的样本浏览器下载代码或使用直接链接。
  2. 在VS下管理员权限打开项目
  3. 交换机构建的配置到x64,并建立它
  4. 杀死所有的探险会议
  5. 找到新的DLL和regsvr32.exe的运行。\ CppShellExtContextMenuHandler.dll
  6. 打开资源管理器再次右键单击一个.cpp文件中看到新的菜单
  7. 通过运行带有/ u标志相同的命令

我的下一个步骤将其删除是让德窃听工作,我觉得这可能做的伎俩:msdn

1

在用于C++扩展的Windows 7 x64上,您需要将其构建为x64项目。在Visual Studio 2010中,ATL向导中有一个选项用于创建提供预览窗口支持,缩略图和Windows搜索支持的外壳扩展项目。我最近使用过它,一旦建成,似乎没有任何事情发生。但是,切换项目配置以构建一个x64 dll让它工作。

关于使用.Net - Explorer现在在单独的子进程中启动插件。因此,加载链接到.net 4.0的外壳扩展并不会污染该.net版本的所有内容,因为只有托管子进程将实际加载该CLR。你可以使用预览扩展看到这一点,因为启动一个新的进程(prevhost)来包含它。

+0

您需要安装32位和64位版本,以便您的32位应用程序也可以获得扩展名。 – 2011-02-25 22:24:45

+0

请注意,您不能依赖Windows XP中的资源管理器子进程加载。在那里,如果.NET 2插件首先加载,.NET 4将会因加载错误的运行时而失败。如果.NET 4首先加载,.NET 2将会正常加载,因为.NET 4支持并行运行时。 – 2011-05-04 14:29:37

0

我得到这个工作:http://www.codeproject.com/Articles/174369/How-to-Write-Windows-Shell-Extension-with-NET-Lang

确保您使用德权RegAsm.exe /注册它:

  • 32位平台:编译为x86 /任何CPU。使用C:\Windows\Microsoft.NET\Framework\vXYZ\RegAsm.exe
  • 64位平台:编译为x64 /任何CPU。使用C:\Windows\Microsoft.NET\Framework64\vXYZ\RegAsm.exe

XYZ是你用于编译的.NET Framework的版本。)

注意,但是,Microsoft recommends against using .NET for shell extensions

0

你可以使用C#的简短答案是否定的。这是来自微软实施进程扩展的指导。 “一个特别注意的运行时间是公共语言运行库(CLR),也称为托管代码或.NET Framework。Microsoft建议不要将受管理的进程内扩展写入Windows资源管理器或Windows Internet Explorer,并且不会将其视为受支持的方案“。 问题出现是因为在应用程序中只能使用单个版本的.NET,并且如果使用多个.NET扩展,则无法强制执行此限制。