Dans .NET, l'option de compilateur 'Platform Target: Any CPU' permet à un assembly .NET de s'exécuter en tant que bit 64 sur un ordinateur x64 et 32 bits sur une machine x86. Il est également possible de forcer un assembly à s'exécuter en tant que x86 sur un ordinateur x64 à l'aide de l'option du compilateur 'Platform Target: x86'.Force x86 CLR sur un assembly 'Any CPU' .NET
Est-il possible d'exécuter un assembly avec l'indicateur 'Any CPU', mais déterminez s'il doit être exécuté dans le CLR x86 ou x64? Normalement, cette décision est prise par le chargeur CLR/OS (comme je le comprends) en fonction de la quantité de bit du système sous-jacent. J'essaie d'écrire une application C# .NET qui peut interagir avec (lire: injecter du code dans) d'autres processus en cours d'exécution. Les processus x64 peuvent uniquement injecter dans d'autres processus x64, et la même chose avec x86. Idéalement, je voudrais tirer parti de la compilation JIT et de l'option CPU pour permettre à une seule application d'être utilisée pour injecter dans des processus x64 ou x86 (sur une machine x64).
L'idée est que l'application serait compilée comme Any CPU. Sur une machine x64, elle fonctionnerait sous x64. Si le processus cible est x86, il devrait se relancer, obligeant le CLR à l'exécuter en tant que x86. Est-ce possible?
Yeh Je suis conscient que vous pouvez le forcer en l'enveloppant dans un assemblage de lanceur x86, mais je me demandais si vous pouviez le forcer dynamiquement pour les assemblys compilés 'Any CPU'. Merci quand même, reviendra probablement à cela si je ne trouve rien d'autre. Wouldvote mais pas assez rep. – jeffora
Les processus sont 64 bits ou 32 bits. Si l'assembly est chargé dans un processus 32 bits et qu'il est construit comme Any CPU, il sera JITé en 32 bits, en 64 bits, il sera JITé en 64. Comment envisagez-vous de créer l'assembly qui héberge vos assemblées? – jnoss