2009-05-27 120 views
3

我有幾個問題如下。 CHM是(編譯的HTML文件)在64位環境中加載32位進程

我的CHM文件有一個鏈接來啓動一個32位應用程序。 CHM文件以Javascript編碼。這在32位操作系統環境中工作正常。

但是這在64位操作系統環境下不起作用。原因是:當我打開chm文件時,64位版本的hh.exe(操作系統可執行文件)執行並啓動chm。 而chm則在64位環境中加載。
現在我無法從CHM文件啓動32位應用程序,因爲64位進程無法加載32位進程。

有沒有什麼辦法可以讓它適用於64位操作系統呢?

我想到了幾個解決方案,但我不知道如何實現它們。

1)在Javascript代碼中,如果我可以檢查操作系統是32位還是64位。那麼如果它是64位操作系統,我可以彈出一個定義良好的錯誤給用戶。

2)或者,如果我可以強制操作系統運行32位版本的hh.exe,以便chm在32位環境中加載,因此不會造成任何問題。

+0

建議添加「chm」和某種Windows(win32?win64?)標記。通常使用Javascript的推定是它是抽象的Javascript或在Web瀏覽器中引用Javascript,這兩種情況都不是這種情況。 – 2009-05-27 12:42:55

回答

0

或者3)分發由CHM啓動的64位版本的應用程序?

+0

問題在於它不能在32位環境中工作。 我們不能擁有多個版本的應用程序。即使我們有兩個版本的應用程序可用,Java Script如何知道啓動哪個版本。 – 2009-05-27 12:40:25

0

您需要執行32位版本的hh.exe。要這樣做啓動hh.exe與此路徑%WINDIR%\ System32 \ hh.exe但啓動應用程序之前,您必須disable the Wow64 file system redirection

這裏有一個例子:

#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 
    } 
} 

注:請記住,revert the redirection之後您調用應用

1

現在我無法啓動從CHM文件中的32位應用程序,因爲64位過程無法加載32位進程

不確定「加載32位進程」是什麼意思,但32位進程可以最當然會創建一個64位的進程。例如,如果我有MyApp32.exe,一個32位應用程序,它可以絕對啓動64位應用程序MyApp64.exe。

當您閱讀32位和64位代碼之間的不兼容性時,它指的是加載64位DLL的32位應用程序,反之亦然。

我懷疑你的問題實際上是你用來啓動應用程序的路徑與WOW64文件系統重定向發生衝突。在此方案中,訪問C:\ Windows \ System32的32位應用程序實際上被重定向到C:\ Windows \ SysWow64 \ System32。你可以閱讀更多關於here

如果這不起作用,有關如何啓動此32位進程以及它在文件系統上的位置的更多信息可能會增加一些清晰度。

相關問題