在Windows 7 64位中使用32位外壳扩展

时间:2012-12-06 16:16:07

标签: c++ windows com 32bit-64bit windows-shell

我想开发一个兼容Windows XP SP2(32位)和Windows 7 64位的shell扩展(上下文菜单处理程序)。

是否可以在64位Windows中运行32位shell扩展,或者是否必须将shell扩展移植/重建为64位才能在Windows 7 64位中使用?

在64位操作系统中使用32位shell扩展是否存在任何缺点/已知问题?

32位应用程序在64位Windows中运行得很好,但我不确定shell扩展,因为,如果我的理解是正确的,shell扩展是 in-proc 加载的COM服务器进入资源管理器进程,它应该是64位Windows中的64位进程...或者是为在64位操作系统中运行的32位外壳扩展提供的“32位仿真”形式?

3 个答案:

答案 0 :(得分:10)

shell扩展只是一个DLL,规则是32位应用程序只能加载32位DLL,而64位应用程序只能加载64位DLL。没有办法解决这个问题。

32位shell扩展在64位系统上仍然有用,因为它意味着加载shell扩展的任何32位第三方应用程序都可以工作。例如,TortoiseSVN附带并安装了32位和64位版本,在64位Windows上,您仍然可以从32位应用程序(如第三方文件管理器)访问TortoiseSVN上下文菜单。

但是资源管理器本身在64位Windows上是64位本机,因此如果您希望它在资源管理器中工作,则需要64位版本的扩展。

答案 1 :(得分:0)

Shell扩展是COM组件。如果您将其安装为进程外服务器,Windows(DCOM)应该处理所有32< - > 64位编组。

然后,MIDL编译器将创建在进程中加载​​的64位存根。

答案 2 :(得分:0)

您可以使用32位资源管理器,例如64位Windows中的xplorer²。它们可以处理32位DLL扩展,可用作搜索内容,预览数据以及在上下文菜单中显示的内容。内置资源管理器是64位的,它忽略了32位扩展。