2009-05-20 4 views
0

Je suis en train d'écrire un outil de validation d'installation pour notre produit et j'ai besoin de récupérer des informations PE à partir de plusieurs assemblages installés. Quelle que soit la plate-forme sur laquelle notre produit est installé, nous expédions des assemblages AMD64, x86 et MSIL à certains endroits pour permettre à l'utilisateur de créer des projets de déploiement pour ces plates-formes.Comment obtenir PEKind et ImageFileMachine d'un assemblage AMD64 à partir d'une application x86 .NET (et viceversa)?

Le problème est que, en utilisant le code suivant:

Module manifestModule = Assembly.LoadFile(fileName).ManifestModule; 
ImageFileMachine m; 
PortableExecutableKinds pe; 
manifestModule.GetPEKind(out pe, out m); 

Assembly.LoadFile (...) cassera si l'application est en cours d'exécution comme x86 et essayer de charger un ensemble AMD64 ou vice-versa.

Je trouve ces associés, mais, pas tout à fait:

  • How to determine if a .NET assembly was built for x86 or x64?Il ne dit pas comment pourriez-vous creuser sur un ensemble AMD64 à partir d'un processus x86. J'ai vraiment vraiment besoin d'ImageFileMachine et de PEKinds en raison du grand nombre d'assemblages que nous avons et des propriétés que nous devons déterminer.

Répondre

0

Essayez d'utiliser Assembly.ReflectionOnlyLoad. Cela vous permettra de charger l'ensemble en mémoire - mais n'exécutera aucun code dedans. Cela permettra aux assemblages x64 d'être chargés pour la réflexion dans un processus x86.

Questions connexes