在64位环境中加载32位进程

发布于 2024-07-23 01:35:10 字数 501 浏览 8 评论 0原文

我有以下几个问题。 CHM 是(编译的 HTML 文件)

我的 CHM 文件有一个启动 32 位应用程序的链接。 CHM 文件是用 Javascript 编码的。这在 32 位操作系统环境中运行良好。

但这在 64 位操作系统环境中不起作用。原因是:当我打开 chm 文件时,64 位版本的 hh.exe(操作系统可执行文件)执行并启动 chm。 并且 chm 会在 64 位环境中加载。
现在我无法从 CHM 文件启动 32 位应用程序,因为 64 位进程无法加载 32 位进程。

有什么方法可以让它也适用于 64 位操作系统吗?

我想到了以下几个解决方案,但我不知道如何实施它们。

1)在Javascript代码中,如果我可以检查操作系统是32位还是64位。如果是64位操作系统,我可以向用户弹出一个明确定义的错误。

2)或者如果我可以强制操作系统运行 hh.exe 的 32 位版本,以便在 32 位环境中加载 chm,从而不会造成问题。

I have a couple of questions as below. CHM is (Compiled HTML File)

My CHM file has a link to launch a 32-bit application. The CHM file is coded in Javascript.This works fine in a 32-bit OS environment.

But this does not work in a 64 bit OS environment.The reason being: When I open the chm file,64-bit version of hh.exe(an operating system executable) executes and launches the chm.
And the chm gets loaded in a 64-bit environment.
And now I cannot launch the 32 bit application from the CHM file, because a 64-bit process cannot load a 32-bit process.

Is there any way I can make it work for 64-bit OS as well ?

I thought of few solutions as below but I dont know how to implement them .

1)In Javascript code,if I could check whether the OS is a 32-bit or 64 bit.Then I could pop-up a well-defined error to user,if it is 64-bit OS.

2)Or if I could force the OS to run the 32-bit version of hh.exe, so that the chm is loaded in a 32-bit environment and hence causing no problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

土豪我们做朋友吧 2024-07-30 01:35:10

现在我无法从 CHM 文件启动 32 位应用程序,因为 64 位进程无法加载 32 位进程

不确定“加载 32 位进程”是什么意思,但 32 位进程可以当然创建一个64位进程。 例如,如果我有 MyApp32.exe(32 位应用程序),它绝对可以启动 MyApp64.exe(64 位应用程序)。

当您了解 32 位和 64 位代码之间的不兼容性时,它指的是 32 位应用程序加载 64 位 DLL,反之亦然。

我怀疑您的问题实际上是您用来启动应用程序的路径与 WOW64 文件系统重定向发生冲突。 在此方案中,访问 C:\Windows\System32 的 32 位应用程序实际上被重定向到 C:\Windows\SysWow64\System32。 阅读更多信息

您可以在此处 不起作用,有关如何启动此 32 位进程以及它在文件系统上的位置的更多信息可能会增加一些清晰度。

And now I cannot launch the 32 bit application from the CHM file, because a 64-bit process cannot load a 32-bit process

Not sure what you mean by 'load a 32-bit process', but a 32-bit process can most certainly create a 64-bit process. For example, if I have MyApp32.exe, a 32-bit application, it can absolutely launch MyApp64.exe, a 64-bit application.

When you read about incompatibilities between 32- and 64-bit code, it refers to a 32-bit application loading a 64-bit DLL, or vice versa.

I suspect your problem is actually the path you are using to launch the application is running afoul of the WOW64 file system redirection. In this scheme, 32-bit applications that access C:\Windows\System32, are actually redirected to C:\Windows\SysWow64\System32. You can read about that more here

If that doesn't work, more information about how you are launching this 32-bit process and where it is located on the file system might add some clarity.

初心 2024-07-30 01:35:10

或者 3) 分发 CHM 启动的应用程序的 64 位版本?

Or 3) distribute a 64-bit version of the application launched by the CHM?

洛阳烟雨空心柳 2024-07-30 01:35:10

您需要执行 hh.exe 的 32 位版本。 为此,请使用此路径 %WINDIR%\System32\hh.exe 启动 hh.exe,但在启动应用程序之前,您必须 禁用 Wow64 文件系统重定向

这里有一个示例:

#define _WIN32_WINNT 0x0501
#include <Windows.h>

void main()
{
    PVOID OldValue;
    HANDLE hFile = INVALID_HANDLE_VALUE;

    BOOL bRet = Wow64DisableWow64FsRedirection (&OldValue);

    if (bRet == TRUE) 
    {
        // Open a file

        hFile = CreateFile(TEXT("C:\\Windows\\System32\\Notepad.exe"),
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

        // Restore the previous WOW64 file system redirection value.

        Wow64RevertWow64FsRedirection (OldValue);
    }

    if( INVALID_HANDLE_VALUE != hFile )  
    {
        // Use the file handle
    }
}

注意:请记住恢复重定向 调用应用程序后

You need to execute the 32 bits version of hh.exe. To do this launch the hh.exe with this path %WINDIR%\System32\hh.exe but before launching the application you must disable the Wow64 file system redirection.

Here you have an example:

#define _WIN32_WINNT 0x0501
#include <Windows.h>

void main()
{
    PVOID OldValue;
    HANDLE hFile = INVALID_HANDLE_VALUE;

    BOOL bRet = Wow64DisableWow64FsRedirection (&OldValue);

    if (bRet == TRUE) 
    {
        // Open a file

        hFile = CreateFile(TEXT("C:\\Windows\\System32\\Notepad.exe"),
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

        // Restore the previous WOW64 file system redirection value.

        Wow64RevertWow64FsRedirection (OldValue);
    }

    if( INVALID_HANDLE_VALUE != hFile )  
    {
        // Use the file handle
    }
}

NOTE: Remember to revert the redirection after you call the application

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文