none
Ermittlung 32 oder 64 Bit OS RRS feed

  • Frage

  • Hi,

    ich nutze das .NET Framework in der Version 3.5 und benötige die Information, ob es sich um ein 32-Bit oder 64-Bit Betriebssystem (nicht Prozess) handelt.

    Ich dachte zunächst, dass ich dies prüfen könnte über:

    Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Machine)

    Auf einem 64-Bit fähigen Prozessor könnte auch ein 32-Bit Betriebssystem installiert sein. Daher vermute ich, dass dieses Kriterium nicht nutzen kann oder liege ich da falsch?

    Habt Ihr eine Idee, wie ich die Information beschaffen kann?

    Danke und viele Grüße,

    Christian.

    Mittwoch, 9. Mai 2012 07:43

Antworten

Alle Antworten

  • Hallo Christian,

    dieser Thread sollte Dir helfen: http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/24792cdc-2d8e-454b-9c68-31a19892ca53


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    • Als Antwort markiert Christian315 Mittwoch, 9. Mai 2012 08:20
    Mittwoch, 9. Mai 2012 07:48
  • Hi Hannes,

    vielen Dank!

    Christian

    Mittwoch, 9. Mai 2012 08:21
  • Hallo Christian,

    Für die Bestimmung des Prozessors kann man auch die Windows API Funktion GetNativeSystemInfo verwenden:

    using System;
    using System.Runtime.InteropServices;
    
    namespace NativeInfoDemo {
        class Program {
            static void Main(string[] args) {
                Console.WriteLine(NativeSystemInfo.SystemPlatform);
                Console.ReadKey();
            }
        }
    
        public sealed class NativeSystemInfo {
            [StructLayout(LayoutKind.Sequential)]
            private struct SYSTEM_INFO {
                public ushort ProcessorArchitecture;
                public ushort Reserved;
                public uint PageSize;
                public IntPtr MinimumApplicationAddress;
                public IntPtr MaximumApplicationAddress;
                public UIntPtr ActiveProcessorMask;
                public uint NumberOfProcessors;
                public uint ProcessorType;
                public uint AllocationGranularity;
                public ushort ProcessorLevel;
                public ushort ProcessorRevision;
            };
    
            [DllImport("kernel32.dll")]
            private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSystemInfo);
    
            public enum Platform { X86, X64, Unknown }
    
            private enum ProcessorArchitecture : ushort {  Intel = 0, IA64 = 6,  AMD64 = 9, Unknown = 65535 }
    
            public static Platform SystemPlatform {
                get {
                    SYSTEM_INFO systemInfo = new SYSTEM_INFO();
                    GetNativeSystemInfo(ref systemInfo);
    
                    switch (systemInfo.ProcessorArchitecture) {
                        case (ushort)ProcessorArchitecture.AMD64:
                            return Platform.X64;
                        case (ushort)ProcessorArchitecture.Intel:
                            return Platform.X86;
                        default:
                            return Platform.Unknown;
                    }
                }
            }
        }
    }

    Ein Beispiel für die Bestimmung der konkreten Betriebsystemversion findest Du hier:

    Getting the System Version (C++, aber leicht portierbar)

    Eine kleine Anmerkung zu IntPtr.Size == 8, ein Vorschlag der oft für die Bestimmung der Bitigkeit des Betriebsystems gemacht wird: Es ist leider nur ein indirekter Beweis. IntPtr.Size gibt - je nach Version des .NET Frameworks - eine im .NET Code fest verdrahtete 4 (32bit) oder 8 (64bit) aus. Es wird dabei keine Anfrage an das Betriebsystem geschickt, es ist purer .NET-Code (return 4;).

    Das .NET-Framework verfügt außerdem über die statische Property Environment.Is64BitOperatingSystem, die "bestimmt, ob das aktuelle Betriebssystem ein 64-Bit-Betriebssystem ist."

    Gruß
    Marcel





    Mittwoch, 9. Mai 2012 08:22
    Moderator