2010-12-01 12 views
1

J'écris un programme Visual C++ dans une pure API Win32. Selon ma compréhension, je dois compiler séparément et générer un exécutable pour l'architecture x86 et x64. Comment puis-je les combiner en un seul exécutable et émettre le x64 au moment de l'exécution?Combiner des exécutables x86 et x64 dans un seul exécutable (comme les outils Sysinternals)

J'ai vu des outils Sysinternals faire la même chose, mais je ne sais pas comment cela est fait par programme. Dois-je inclure ma version x64 en tant que ressource dans x86, puis écrire dans le système de fichiers et CreateProcess?

Des pointeurs?

+0

En général, les applications x86 s'exécutent très bien sur x64. Les outils sysinternals utilisent cependant des pilotes, qui doivent être construits pour l'architecture du noyau de droite – Bahbar

+0

Mais les questions demeurent. Comment faire que les exécutables incase internes sont différents. –

+1

Personnellement, je déteste la façon dont les outils sysinternals font cela. Ils créent et suppriment des fichiers inutilement chaque fois qu'ils s'exécutent et vous vous retrouvez avec deux fois plus d'entrées dans le gestionnaire de tâches (avec un exe qui reste assis en attendant de supprimer le binaire de l'autre). Je ne vois pas le point. Il n'est pas difficile de faire un installateur qui installe le bon fichier sur la machine, et pour les outils sans installateur, il n'est pas difficile de donner aux exes un exe dans un zip et de les laisser courir le bon (si l'un fonctionne le mauvais). –

Répondre

3

Oui, ils intègrent le pilote spécifique à l'exploitation en tant que ressource. Voici une capture d'écran de Visual Studio après avoir utilisé fichier + Open + Fichier pour ouvrir leur utilité Handle.exe:

alt text

pas exactement ce qu'ils sont, mais il semble certainement comme ils couvrent Windows 9x, 32 bits et 64 bits. La prochaine chose qu'ils feraient est d'utiliser les fonctions de l'API de ressources (FindResource, SizeofResource, LockResource) et WriteFile() le contenu de la ressource dans un fichier dans un répertoire accessible en écriture. Puis chargez le pilote avec CreateService et StartService.

Le programme principal est x86 donc il fonctionne sur n'importe quelle version de Windows. Générer des binaires à l'exécution n'est pas une chose très facile à faire pour les clients, ils (et leur antivirus) aiment généralement savoir ce qui vient d'où.