4 Stimmen

Kann eine WinForms-Anwendung so konfiguriert werden, dass sie ohne Neukompilierung als "x86" ausgeführt wird?

Kann eine WinForms-App, die für "Any CPU" kompiliert wurde, so konfiguriert werden, dass sie als "x86" auf einem 64-Bit-Server ausgeführt wird, ohne die App neu zu kompilieren? Insbesondere bin ich auf der Suche nach einer app.config Einstellung oder Systemsteuerung Applet, um dieses Ziel zu erreichen. Alle Clients des Kunden sind x86, aber der Server ist x64, und wir möchten die WinForms-Anwendung auf dem Server für Administratoren installieren, um das System zu konfigurieren und zu überwachen. Wir würden es vorziehen, nicht nur für den Server neu zu kompilieren.

11voto

Rory Becker Punkte 15461

Von http://www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspx

Sie können jedoch kontrollieren und dieses Standardverhalten auch außer Kraft setzen nachdem Ihr Code kompiliert wurde. Es gibt ein praktisches Werkzeug namens corflags.exe, das im SDK enthalten ist und das Ihnen erlaubt, 'anycpu' kompilierten Code zu zwingen Code zur Verwendung von 32-Bit-Prozessen in der 64-Bit Welt zu verwenden.

Die Verwendung dieses Dienstprogramms finden Sie hier http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx

1voto

Nick Punkte 5805

Wenn Sie Ihren verwalteten Code korrekt geschrieben haben, sollte keine Konfiguration erforderlich sein. Solange auf dem 64-Bit-Rechner die richtigen Frameworks installiert sind, kümmert sich der JIT-Prozess um alle Unterschiede zwischen den 32- und 64-Bit-Anforderungen.

Das einzige, worüber Sie sich in Ihrem eigenen Code Gedanken machen müssen, ist, ob Sie P/Invoke verwenden. In diesem Fall müssen Sie jedes Mal, wenn Sie eine API-Funktion aufrufen, die einen Typ HANDLE oder void* verwendet, sicherstellen, dass Sie immer System.IntPtr und nicht System.Int32 verwenden. In der .NET-Welt ist der int-Datentyp IMMER 32 Bit, selbst auf einem 64-Bit-Rechner. Ebenso ist ein long immer 64 Bit, unabhängig von der Architektur.

Und IntPtr jedoch ist immer die Größe von void*, und so richtig JIT's zu verschiedenen Größen je nach Architektur der Maschine, die Sie ausführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X