Zadaj pytanie
Subskrybuj kanał RSSnajnowszych pytań
Aplikacja oparta o .NET 3.5 jest kompilowana najczęściej na platformę neutralną (wszystko jedno czy jest to x86, czy x64) jak sprawdzić czy po uruchomieniu działa jako aplikacja x86, czy x64?
Odpowiedz na pytanie
1
2 lata, 3 miesiące temu autor: tomaszs
Do tego celu użyłbym WMI. Trzeba dodać referencję do System.Management i dopisać kod: ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"); object o = Mo["Architecture"]; UInt16 sp = (UInt16)(o); if (sp == 0) { MessageBox.Show("x86"); } else if (sp == 9) { MessageBox.Show("x64"); } Mo.Dispose(); Tutaj dostępne są różne architektury procesora jakie można rozpoznać. Update. Problem jednak nie jest tak prosty jak przedstawiam to ja i halish. Jeżeli potrzebujesz kompletne rozwiązanie odsyłam tutaj. Autorem poniższego kodu-rozwiązania jest Bruno Lopes (z powyższego linku): [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); private bool Is64Bit() { if (IntPtr.Size == 8 || (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor())) { return true; } else { return false; } } private bool Is32BitProcessOn64BitProcessor() { bool retVal; IsWow64Process(Process.GetCurrentProcess().Handle, out retVal); return retVal; }
Do tego celu użyłbym WMI. Trzeba dodać referencję do System.Management i dopisać kod:
ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"); object o = Mo["Architecture"]; UInt16 sp = (UInt16)(o); if (sp == 0) { MessageBox.Show("x86"); } else if (sp == 9) { MessageBox.Show("x64"); } Mo.Dispose();
Tutaj dostępne są różne architektury procesora jakie można rozpoznać.
Update. Problem jednak nie jest tak prosty jak przedstawiam to ja i halish. Jeżeli potrzebujesz kompletne rozwiązanie odsyłam tutaj.
Autorem poniższego kodu-rozwiązania jest Bruno Lopes (z powyższego linku):
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); private bool Is64Bit() { if (IntPtr.Size == 8 || (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor())) { return true; } else { return false; } } private bool Is32BitProcessOn64BitProcessor() { bool retVal; IsWow64Process(Process.GetCurrentProcess().Handle, out retVal); return retVal; }
2 lata, 3 miesiące temu autor: halish
4
IntPtr.Size da ci rozmiar inta, który wynosi 8, jesli maszyna jest 64-bit, lub 4, jeśli 32-bit. http://msdn.microsoft.com/en-us/library/system.intptr.size.aspx
IntPtr.Size da ci rozmiar inta, który wynosi 8, jesli maszyna jest 64-bit, lub 4, jeśli 32-bit.
http://msdn.microsoft.com/en-us/library/system.intptr.size.aspx
2 lata, 3 miesiące temu autor: MaciejZbrzezny
0
Wprawdzie pytałem się o .NET 3.5, ale znalazłem (tak w ramach ciekawostki i informacji na przyszłość), że problem ten jest bardzo prosty do rozwiązania na platformie .NET 4.0. Klasa Environment została rozszerzona o nowe właściwości: Environment.Is64BitOperatingSystem - zwraca prawdę, gdy wywołanie ma miejsce pod 64-bitowym systemem operacyjnym Environment.Is64BitProcess - zwraca prawdę w przypadku, gdy proces jest 64bitowy. pzdr, Maciek http://maciej-progtech.blogspot.com/
Wprawdzie pytałem się o .NET 3.5, ale znalazłem (tak w ramach ciekawostki i informacji na przyszłość), że problem ten jest bardzo prosty do rozwiązania na platformie .NET 4.0. Klasa Environment została rozszerzona o nowe właściwości:
Environment.Is64BitOperatingSystem - zwraca prawdę, gdy wywołanie ma miejsce pod 64-bitowym systemem operacyjnym
Environment.Is64BitProcess - zwraca prawdę w przypadku, gdy proces jest 64bitowy.
pzdr,
Maciek
http://maciej-progtech.blogspot.com/
Zaloguj się, aby dodać swoją odpowiedź
780414
powrót do góry
Copyright © 9fingers.pl Webdesign: TonikStudio.pl