2012-12-06 90 views
8

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

是否可以在64位Windows中运行32位外壳扩展,或者必须将外部扩展移植/重新构建为64位才能用于Windows 7 64位?

在64位操作系统中使用32位外壳扩展是否存在任何缺点/已知问题?因为如果我的理解是正确的,外壳扩展是in-proc COM服务器加载到资源管理器进程中,但是我不确定是否有外壳扩展,它应该是64位Windows中的64位进程......或者是为在64位操作系统中运行的32位外壳程序提供的“32位模拟”形式?

+0

没有选项。除了x64目标以外,只需将其他配置添加到使用Win32目标的项目中即可。如果你的代码是干净的,那么在生成DLL的x86和x64版本时就不会遇到任何问题。 –

+0

@HansPassant:这听起来像是一个合法的答案。 –

+0

@HansPassant:我也想知道32位和64位外壳扩展是否应该有_different_ GUID。 –

回答

10

外壳扩展只是一个DLL,规则是32位应用程序只能加载32位DLL,而64位应用程序只能加载64位DLL。这是没有办法的。

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

但是资源管理器本身在64位Windows上是64位本地的,所以如果你想让它在资源管理器中工作,你需要一个64位版本的扩展。

0

Shell扩展是COM组件。如果您将其作为进程外服务器进行安装,则Windows(DCOM)应负责完成所有32 < - > 64位编组。

然后,MIDL编译器将创建正在加载的64位存根。

+2

它实际上并不像那样工作... –

+1

这是不正确的。内容菜单处理程序是进程内扩展,不能实现为进程外。 https://msdn.microsoft.com/en-us/library/windows/desktop/dd758089(v=vs.85).aspx。分布式COM(DCOM)不适用 – MickyD

+0

@Micky您的链接不支持您的声明。有另一个参考? –

0

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

相关问题