Loading a 32-bit process in a 64-bit environment

北慕城南 提交于 2019-12-12 15:14:17

问题


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.


回答1:


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.




回答2:


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




回答3:


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



来源:https://stackoverflow.com/questions/915398/loading-a-32-bit-process-in-a-64-bit-environment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!