Bagaimana saya bisa mendeteksi versi OS Windows di .net?
Kode apa yang bisa saya gunakan?
sumber
Bagaimana saya bisa mendeteksi versi OS Windows di .net?
Kode apa yang bisa saya gunakan?
System.Environment.OSVersion
memiliki informasi yang Anda perlukan untuk membedakan sebagian besar rilis utama OS Windows, tetapi tidak semua. Ini terdiri dari tiga komponen yang memetakan ke versi Windows berikut:
+------------------------------------------------------------------------------+
| | PlatformID | Major version | Minor version |
+------------------------------------------------------------------------------+
| Windows 95 | Win32Windows | 4 | 0 |
| Windows 98 | Win32Windows | 4 | 10 |
| Windows Me | Win32Windows | 4 | 90 |
| Windows NT 4.0 | Win32NT | 4 | 0 |
| Windows 2000 | Win32NT | 5 | 0 |
| Windows XP | Win32NT | 5 | 1 |
| Windows 2003 | Win32NT | 5 | 2 |
| Windows Vista | Win32NT | 6 | 0 |
| Windows 2008 | Win32NT | 6 | 0 |
| Windows 7 | Win32NT | 6 | 1 |
| Windows 2008 R2 | Win32NT | 6 | 1 |
| Windows 8 | Win32NT | 6 | 2 |
| Windows 8.1 | Win32NT | 6 | 3 |
+------------------------------------------------------------------------------+
| Windows 10 | Win32NT | 10 | 0 |
+------------------------------------------------------------------------------+
Untuk perpustakaan yang memungkinkan Anda untuk mendapatkan tampilan yang lebih lengkap tentang tepat peluncuran Windows bahwa lingkungan eksekusi saat ini sedang berjalan di, memeriksa perpustakaan ini .
Catatan penting : jika manifes rakitan yang dapat dieksekusi Anda tidak secara eksplisit menyatakan bahwa rakitan exe Anda kompatibel dengan Windows 8.1 dan Windows 10.0, System.Environment.OSVersion
akan mengembalikan versi Windows 8, yaitu 6.2, bukan 6.3 dan 10.0! Sumber: di sini .
Saya menggunakan ini ketika saya harus menentukan berbagai versi Sistem Operasi Microsoft:
Sumber: di sini
sumber
vs.Minor != 0
tidak harusXP
atau7
. Ini bisa berupa edisi server mana saja yang memiliki versi kecil yang sama .. Lihat di sini msdn.microsoft.com/en-us/library/windows/desktop/…Saya menggunakan
ManagementObjectSearcher
namespaceSystem.Management
Contoh:
Hasil:
Dokumentasi
sumber
Seperti yang disarankan R. Bemrose, jika Anda melakukan fitur spesifik Windows 7, Anda harus melihat Paket Kode API Windows® untuk Microsoft® .NET Framework .
Berisi a
CoreHelpers
kelas yang memungkinkan Anda menentukan OS Anda saat ini (hanya XP dan di atasnya, itu persyaratan untuk .NET nowaday)Ini juga menyediakan beberapa metode pembantu. Misalnya, anggap Anda ingin menggunakan daftar lompatan Windows 7, ada kelas
TaskbarManager
yang menyediakan properti yang dipanggilIsPlatformSupported
dan itu akan mengembalikan true jika Anda berada di Windows 7 dan di atasnya.sumber
Anda bisa menggunakan kelas pembantu ini;
Kode contoh ada di sini:
Saya ditemukan di alamat ini: http://www.csharp411.com/wp-content/uploads/2009/01/OSInfo.cs
sumber
Melalui
Environment.OSVersion
mana "Mendapat objek System.OperatingSystem objek yang berisi pengidentifikasi platform saat ini dan nomor versi."sumber
Semua ini sepertinya jawaban yang sangat rumit untuk fungsi yang sangat sederhana:
sumber
Deteksi Versi OS:
sumber
Ini adalah pertanyaan yang relatif lama tetapi saya baru saja menyelesaikan masalah ini dan tidak melihat solusi saya diposting di mana pun.
Cara termudah (dan paling sederhana menurut saya) adalah dengan hanya menggunakan panggilan pinvoke ke RtlGetVersion
Di mana nomor versi Major dan Minor dalam struct ini sesuai dengan nilai-nilai dalam tabel jawaban yang diterima.
Ini mengembalikan nomor versi Windows yang benar tidak seperti fungsi GetVersion & GetVersionEx yang sudah usang dari kernel32
sumber
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
Nilai kembali adalah "Microsoft Windows 10 Enterprise"
sumber
Satu arah:
Maka cukup bungkus kasus pilih di sekitar fungsi.
sumber
Bagaimana kalau menggunakan Registry untuk mendapatkan nama.
"HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion" memiliki nilai ProductName sejak Windows XP.
Jika Anda menggunakan .NET Framework 4.0 atau lebih tinggi. Anda dapat menghapus metode Is64BitOperatingSystem () dan menggunakan Lingkungan.Is64BitOperatingSystem .
sumber
Solusi pertama
Untuk memastikan Anda mendapatkan versi yang tepat,
Environment.OSVersion
Anda harus menambahkanapp.manifest
menggunakan Visual Studio dan menghapus tanda komentar berikutsupportedOS
:Kemudian dalam kode Anda, Anda dapat menggunakan
Environment.OSVersion
seperti ini:Contoh
Misalnya di mesin saya (
Windows 10.0 Build 18362.476
) hasilnya akan seperti ini yang tidak benar :Dengan menambahkan
app.manifest
dan menghapus tanda komentar pada tag tersebut, saya akan mendapatkan nomor versi yang benar:Solusi alternatif
Jika Anda tidak suka menambahkan
app.manifest
ke proyek Anda, Anda dapat menggunakanOSDescription
yang tersedia sejak .NET Framework 4.7.1 dan .NET Core 1.0.Catatan: Jangan lupa untuk menambahkan pernyataan menggunakan berikut di atas file Anda.
Anda dapat membaca lebih lanjut tentang hal ini dan platform yang didukung di sini .
sumber
Jawaban di atas akan memberi saya
Major
versi6
pada Windows 10.Solusi yang saya temukan berfungsi tanpa menambahkan pustaka VB tambahan adalah sebagai berikut:
Saya tidak akan menganggap ini cara terbaik untuk mendapatkan versi, tetapi sisi baiknya ini adalah oneliner tidak ada perpustakaan tambahan, dan dalam kasus saya memeriksa apakah isinya
"10"
cukup baik.sumber
Jangan terlalu memperumit masalah.
sumber
Major
bagian dari versi. Ditambah lagi laporan "Win7!" pada sistem operasi Windows NT / Me / 98/95. Ini juga tidak akan dapat mengatasi dengan baik versi masa depan sistem operasi