在 Windows 7 64 位中使用 32 位 shell 扩展

2022-01-14 00:00:00 windows com c++ 32bit-64bit windows-shell

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

I'd like to develop a shell extension (context menu handler) compatible with both Windows XP SP2 (32-bit) and Windows 7 64-bit.

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

Is it possible to run 32-bit shell extensions in 64-bit Windows, or must the shell extension be ported/rebuilt to 64-bit to be used in Windows 7 64-bit?

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

Are there any disadvantages / known issues in using 32-bit shell extensions in 64-bit operating systems?

32 位应用程序在 64 位 Windows 中运行良好,但我不确定 shell 扩展,因为如果我的理解正确,shell 扩展是 in-proc COM 服务器加载的进入 Explorer 进程,它应该是 64 位 Windows 中的 64 位进程……还是为在 64 位操作系统中运行的 32 位 shell 扩展提供的32 位仿真"形式?

32-bit apps run just fine in 64-bit Windows, but I'm not sure about shell extensions, since, if my understanding is correct, shell extensions are in-proc COM servers loaded into Explorer process, which should be a 64-bit process in 64-bit Windows...or is a form of "32-bit emulation" provided for 32-bit shell extensions running in 64-bit OS?

推荐答案

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

A shell extension is just a DLL, and the rule is that 32-bit applications can only load 32-bit DLLs, and 64-bit applications can only load 64-bit DLLs. There is no way around this.

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

A 32-bit shell extension may still be useful on a 64-bit system as it means that any 32-bit third-party applications that load shell extensions will work. For example, TortoiseSVN ships with and installs both 32- and 64-bit versions, and so on 64-bit Windows you can still access TortoiseSVN context menus from 32-bit applications (like a third-party file manager).

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

But Explorer itself is 64-bit native on 64-bit Windows and so you need a 64-bit version of your extension if you want it to work in Explorer.

相关文章