2009-05-27 14 views
3

以下のような質問が2つあります。 CHM is(Compiled HTML File)64ビット環境での32ビットプロセスのロード

私のCHMファイルには、32ビットアプリケーションを起動するためのリンクがあります。 CHMファイルはJavascriptでコード化されています。これは32ビットOS環境でうまく動作します。

しかし、これは64ビットOS環境では機能しません。その理由は:chmファイルを開くと、64ビットバージョンのhh.exe(オペレーティングシステムの実行可能ファイル)が実行され、chmが起動されます。 そして、chmは64ビット環境で読み込まれます。
そして、64ビットプロセスが32ビットプロセスをロードできないため、CHMファイルから32ビットアプリケーションを起動できません。

64ビットOSでも動作させる方法はありますか?

私は以下のようないくつかのソリューションを考えましたが、それらを実装する方法はわかりません。

1)OSが32ビットであるか64ビットであるかを確認することができます。64ビットOSの場合は、ユーザーに明確なエラーがポップアップ表示されます。

2)また、OSに32ビットバージョンのhh.exeを強制的に実行させて、chmが32ビット環境にロードされ、問題が発生しないようにすることができますか。

+0

は、「chm」と何らかの種類のWindows(win32?win64?)タグを追加することを提案しています。Javascriptの通常の仮定は、それが抽象的なJavascriptであるか、またはWebブラウザ内のJavascriptを参照することであり、どちらもその場合ではありません。 –

答えて

0

3)CHMによって起動されたアプリケーションの64ビットバージョンを配布しますか?

+0

この問題は、32ビット環境では機能しないという問題があります。 複数のバージョンのアプリケーションを使用することはできません。また、アプリケーションに両方のバージョンを用意しても、どのバージョンを起動するのかをJava Scriptがどのように知っていますか。 –

+0

32ビット版と64ビット版があるとすれば、正しい版を正しいプラットフォームに配布することをお勧めします。 32ビットバージョンのhh.exeを起動することはできませんので、唯一のオプションかもしれません。 – RobS

0

hh.exeの32ビットバージョンを実行する必要があります。これを行うには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 
    } 
} 

注:アプリケーションに

1

を呼び出しそして今、私は64ので、CHMファイルから32ビットアプリケーションを起動することはできません後revert the redirectionに覚えているがビットプロセスが32ビットプロセスをロードできない

「32ビットプロセスをロードする」という意味が不明ですが、32ビットプロセスはほとんどが確かに64ビットプロセスを作成します。たとえば、32ビットアプリケーションであるMyApp32.exeがある場合、64ビットアプリケーションであるMyApp64.exeを絶対に起動できます。

32ビットと64ビットのコードの互換性については、64ビットDLLをロードする32ビットアプリケーションを参照してください。

あなたの問題は、実際にアプリケーションを起動するために使用しているパスがWOW64ファイルシステムのリダイレクトに反していると思われます。このスキームでは、C:\ Windows \ System32にアクセスする32ビットアプリケーションは、実際にはC:\ Windows \ SysWow64 \ System32にリダイレクトされます。そのことについてもっと読むことができますhere

これでうまくいかない場合は、この32ビットプロセスをどのように起動するのか、ファイルシステム上のどこにファイルシステムが置かれているのかについての情報があれば分かります。

関連する問題