3 votes

Chargement d'un processus 32 bits dans un environnement 64 bits

J'ai quelques questions à vous poser. CHM est (Compiled HTML File)

Mon fichier CHM contient un lien permettant de lancer une application 32 bits. Le fichier CHM est codé en Javascript et fonctionne parfaitement dans un environnement OS 32 bits.

Mais cela ne fonctionne pas dans un environnement de système d'exploitation 64 bits, pour la raison suivante : 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.

Y a-t-il un moyen de le faire fonctionner également pour les systèmes d'exploitation 64 bits ?

J'ai pensé à 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 un 64 bits, je pourrais alors faire apparaître 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.

1voto

anelson Points 1454

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.

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

Lorsque vous lisez sur les incompatibilités entre le code 32 et 64 bits, cela fait référence à une application 32 bits chargeant 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 qui se heurte à la redirection du système de fichiers WOW64. Dans ce schéma, les applications 32 bits qui accèdent à C:\Windows\System32 sont en fait redirigés vers C:\Windows\SysWow64\System32. Vous pouvez en savoir plus à ce sujet aquí

Si cela ne fonctionne pas, des informations supplémentaires sur la manière dont vous lancez ce processus 32 bits et sur son emplacement dans le système de fichiers pourraient apporter des éclaircissements.

0voto

RobS Points 6280

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

0voto

Jesus Fernandez Points 916

Vous devez exécuter la version 32 bits de hh.exe . Pour ce faire, lancez le hh.exe avec cette voie %WINDIR \System32\hh.exe mais avant de lancer l'application, vous devez désactiver la redirection du système de fichiers Wow64 .

Vous avez ici 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 : N'oubliez pas de inverser la redirection après avoir appelé l'application

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X