2009-05-27 9 views
3

J'ai quelques questions comme ci-dessous. CHM est (Compilé fichier HTML)Chargement d'un processus 32 bits dans un environnement 64 bits

Mon fichier CHM a un lien pour lancer une application 32 bits. Le fichier CHM est codé en Javascript. Cela fonctionne très bien dans un environnement de système d'exploitation 32 bits.

Mais cela ne fonctionne pas dans un environnement de système d'exploitation 64 bits. La raison étant: Lorsque j'ouvre le fichier chm, la version 64 bits de hh.exe (un exécutable du système d'exploitation) s'exécute et lance le chm. Et le chm est chargé dans un environnement 64 bits.
Et maintenant, je ne peux pas lancer l'application 32 bits à partir du fichier CHM, car un processus 64 bits ne peut pas charger un processus 32 bits.

Est-il possible que je peux le faire fonctionner pour OS 64 bits ainsi?

Je pensais que des quelques solutions comme ci-dessous, mais je ne sais pas comment les mettre en œuvre.

1) Dans le code Javascript, si je pouvais vérifier si le système d'exploitation est un 32 bits ou 64 bits. Puis je pourrais faire une erreur bien définie à l'utilisateur, s'il s'agit d'un système d'exploitation 64 bits.

2) Ou si je pouvais forcer le système d'exploitation à exécuter la version 32 bits de hh.exe, de sorte que le chm soit chargé dans un environnement 32 bits et ne cause donc aucun problème.

+0

suggère d'ajouter "chm" et une sorte de tags Windows (win32? Win64?).La présomption habituelle avec Javascript est qu'il s'agit de Javascript abstrait ou de Javascript dans un navigateur web, ce qui n'est pas le cas ici. –

Répondre

0

ou 3) distribuer une version 64 bits de l'application lancée par le CHM?

+0

Le problème avec ceci est qu'il ne fonctionnerait pas dans un environnement 32 bits. Et nous ne pouvons pas avoir plusieurs versions de l'application. Et même si nous avons les deux versions disponibles pour l'application, comment Java Script sait lequel lancer. –

+0

En supposant que vous pourriez avoir une version 32 et 64 bits, je vous suggère de distribuer la bonne édition à la bonne plate-forme. Étant donné que vous ne pouvez pas alors lancer la version 32 bits hh.exe pourrait être votre seule option. – RobS

0

Vous devez exécuter la version 32 bits de hh.exe. Pour ce faire, lancez le hh.exe avec ce chemin % WINDIR% \ System32 \ hh.exe mais avant de lancer l'application, vous devez disable the Wow64 file system redirection.

Ici vous avez un exemple:

#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: Rappelez-vous revert the redirection après que vous appelez l'application

1

Et maintenant je ne peux pas lancer l'application 32 bits à partir du fichier CHM, parce qu'un 64 processus -bit ne peut pas charger un processus 32 bits

Je ne sais pas ce que vous entendez par « charger un processus 32 bits », mais un processus 32 bits peut plus certainement créer un processus 64 bits. Par exemple, si j'ai MyApp32.exe, une application 32 bits, il peut absolument lancer MyApp64.exe, une application 64 bits.

Lorsque vous lisez sur les incompatibilités entre 32- et le code 64 bits, il fait référence à une application 32 bits du chargement d'une DLL 64 bits, ou vice versa.

je soupçonne que votre problème est en fait le chemin que vous utilisez pour lancer l'application est en cours d'exécution de la redirection encontre du système de fichiers WOW64. Dans ce schéma, les applications 32 bits qui accèdent à C: \ Windows \ System32 sont redirigées vers C: \ Windows \ SysWow64 \ System32. En savoir plus here

Si cela ne fonctionne pas, plus d'informations sur la façon dont vous lancez ce processus 32 bits et où il se trouve sur le système de fichiers peuvent apporter une certaine clarté.