2010-01-07 10 views
4

Je tente de détecter la bonne architecture de processeur pour installer un fichier x86 msi ou x64 msi.Bon moyen de détecter l'architecture de l'unité centrale de traitement?

Si je ne me trompe pas, pour le besoin msi je l'architecture cpu os

Je ne suis pas tout à fait sûr que mon chemin est juste parce que je ne peux pas tester. Que pensez-vous?

private static string GetOSArchitecture() 
    { 
     string arch = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); 
     string archWOW = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"); 
     if(archWOW != null && archWOW != "" && archWOW.Contains("64")) 
      return "x64"; 
     if(arch.Contains("86")) 
      return "x86"; 
     if (arch.Contains("64")) 
      return "x64"; 
     return ""; 
    } 
+3

Allez-vous vraiment envoyer un installateur sans le tester d'abord? C'est courageux. –

+0

Je peux le tester mais seulement sur une machine x64 et une machine x32 pas sur chaque type de CPU ... c'est le problème – Kai

+0

une solution finale à ce sujet? – Kiquenet

Répondre

0

La façon right est d'appeler IsWow64Process. Cette API "nécessite Windows XP SP2, Windows Vista, Windows Server 2003 SP1 ou Windows Server 2008". This method est encore plus facile.

+1

Cela ne vous dira pas quel est l'arc du processeur, mais seulement ce que le processus lui-même exécute. – mletterle

+0

Avez-vous besoin de l'architecture du système d'exploitation ou de l'architecture réelle du processeur? –

+0

J'ai besoin de cette architecture qui est importante pour exécuter le bon msi. le code fait partie d'un programme de mise à jour qui télécharge le fichier msi et l'exécute. – Kai

0

Simple, essayez d'exécuter une application 64 bits. Si cela échoue, vous êtes sur une plate-forme 32 bits. En fonction de ce que vous essayez de faire, si vous vous assurez que votre application msi runner est une application 32 bits, utilisez la méthode de Stuart pour l'ajouter.

+0

pas une bonne idée, parce que je ne télécharge qu'un seul fichier pas les deux ... – Kai

3

Vous pouvez P/Invoke à GetNativeSystemInfo, ce qui donnera l'architecture de la CPU du système d'exploitation, même à partir d'un processus 32 bits sur un système d'exploitation 64 bits.

+0

Si j'ai raison, pour le msi j'ai besoin de l'architecture OS cpu – Kai

+1

Et c'est ce que cela vous donne. – Michael

+0

Un système Windows 32 bits peut être installé sur une CPU 64 bits. MSDN et votre réponse "l'architecture réelle du processeur" me disent que GetNativeSystemInfo signale x64, mais Kai doit être informé de x86 dans ce cas. –