2017-05-11 1 views
2

Auf meinem 32-Bit-System (Windows 10), habe ich ein sehr einfaches Windows Forms (.NET FW 3.5) Anwendung:Warum läuft 32-Bit-Programm nicht unter WoW64?

 bool x86 = IntPtr.Size == 4; 

     if (x86) 
     { 
      label1.Text = "OS: 32 bit"; 
     } 
     else // IntPtr.Size == 8 
     { 
      label1.Text = "OS: 64 bit"; 

      // For following method, see: 
      // http://stackoverflow.com/a/336729/360840 
      if (InternalCheckIsWow64()) 
      { 
       label1.Text += "; 32 bit program running under WoW64"; 
      } 
     } 

in Visual Studio 2015 unter Eigenschaften -> Build, habe ich Platform Ziel als x86.

Ich nahm diese ausführbare Datei zu einem 64-Bit-Windows Server 2012 Datacenter-Edition und führte es aus. Ich hatte erwartet, dass es sich unter WoW64 melden würde, war aber überrascht herauszufinden, dass dies nicht der Fall war. es meldet nur, dass die Architektur 64 Bit ist, aber zeigt nicht den "; 32-Bit-Programm läuft unter WoW64" -Teil an.

Warum ist das und was ist los?

+0

Warten. Das Label ist tatsächlich auf "OS: 64 Bit" mit einem Build-Ziel auf x86 festgelegt? – Milster

+0

Ja, 32-Bit-Apps können auf 64-Bit-Systemen ausgeführt werden. – Sabuncu

+1

Das ist nicht meine Frage. Soweit ich mich erinnern kann, sollte IntPtr.Size auf 4 gesetzt werden, um den Build auf x86 zu setzen (da der Prozess ein 32-Bit-Prozess sein wird) (genau das ist das Verhalten, das ich gerade in einer Testkonsolen-App auf meinem PC sehe))). Deshalb habe ich gefragt, ob in Ihrem Fall das Label wirklich auf "OS: 64 Bit" eingestellt ist. – Milster

Antwort

1

IntPtr.Size wird vom Prozess selbst (oder besser gesagt vom Build-Ziel) festgelegt, nicht vom Betriebssystem.

Ein Programm, das mit einem x86-Ziel in C# erstellt wird, hat immer IntPtr.Size = 4, während x64 immer IntPtr.Size = 8 hat. Dies ist in der Tat eine Prüfung für den Prozess, nicht das Betriebssystem.

Bearbeiten: Die Antwort im verknüpften Thema gibt genau das gleiche.

+0

Nochmals vielen Dank. – Sabuncu