c#


Identify the Operating System details in C#


How can I get the OS details using C# code in my WPF application?
The Environment class provides properties that can be used to obtain system information.
You can get OS information from System. Environment.OSVersion Here
Have a look at System.Environment It has property OSVersion
Since I only have to care about non server editions, I do:
enum OS { _2000, XP, Vista, _7, _8 }
public static OS GetOS()
{
var version = Environment.OSVersion.Version;
switch (version.Major)
{
case 5:
switch (version.Minor)
{
case 0:
return OS._2000;
case 1:
return OS.XP;
case 2:
return OS.XP; //could also be Server 2003, Server 2003 R2
}
break;
case 6:
switch (version.Minor)
{
case 0:
return OS.Vista; //could also be Server 2008
case 1:
return OS._7; //could also be Server 2008 R2
case 2:
return OS._8; //could also be Server 20012, Server 2012 R2
}
break;
}
throw new Exception("Strange OS");
}
If you really need to consider server editions as well, then your options are:
WMI, you will have to some manual parsing. Not sure if user privilege is going to hurt non admin users.
GetVersionEx as described in this answer.
Checking for ProductName at
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
IsOS function, as described in this answer. Of all I prefer this..
I provided a bit more complete answer here.
Using the registry is something that is possible for any application. In C# I have made myself a utility class for this. Note that Microsoft has changed the key for Windows 10+ (which this class is designed to already handle). The class should give you the information you need, I think:
namespace Inspection
{
/// <summary>
/// Static class that adds convenient methods for getting information on the running computers basic hardware and os setup.
/// </summary>
public static class ComputerInfo
{
/// <summary>
/// Returns the Windows major version number for this computer.
/// </summary>
public static uint WinMajorVersion
{
get
{
dynamic major;
// The 'CurrentMajorVersionNumber' string value in the CurrentVersion key is new for Windows 10,
// and will most likely (hopefully) be there for some time before MS decides to change this - again...
if (TryGeRegistryKey(#"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentMajorVersionNumber", out major))
{
return (uint) major;
}
// When the 'CurrentMajorVersionNumber' value is not present we fallback to reading the previous key used for this: 'CurrentVersion'
dynamic version;
if (!TryGeRegistryKey(#"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", out version))
return 0;
var versionParts = ((string) version).Split('.');
if (versionParts.Length != 2) return 0;
uint majorAsUInt;
return uint.TryParse(versionParts[0], out majorAsUInt) ? majorAsUInt : 0;
}
}
/// <summary>
/// Returns the Windows minor version number for this computer.
/// </summary>
public static uint WinMinorVersion
{
get
{
dynamic minor;
// The 'CurrentMinorVersionNumber' string value in the CurrentVersion key is new for Windows 10,
// and will most likely (hopefully) be there for some time before MS decides to change this - again...
if (TryGeRegistryKey(#"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentMinorVersionNumber",
out minor))
{
return (uint) minor;
}
// When the 'CurrentMinorVersionNumber' value is not present we fallback to reading the previous key used for this: 'CurrentVersion'
dynamic version;
if (!TryGeRegistryKey(#"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", out version))
return 0;
var versionParts = ((string) version).Split('.');
if (versionParts.Length != 2) return 0;
uint minorAsUInt;
return uint.TryParse(versionParts[1], out minorAsUInt) ? minorAsUInt : 0;
}
}
/// <summary>
/// Returns whether or not the current computer is a server or not.
/// </summary>
public static uint IsServer
{
get
{
dynamic installationType;
if (TryGeRegistryKey(#"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "InstallationType",
out installationType))
{
return (uint) (installationType.Equals("Client") ? 0 : 1);
}
return 0;
}
}
private static bool TryGeRegistryKey(string path, string key, out dynamic value)
{
value = null;
try
{
var rk = Registry.LocalMachine.OpenSubKey(path);
if (rk == null) return false;
value = rk.GetValue(key);
return value != null;
}
catch
{
return false;
}
}
}
}

Related Links

How to add watermark image in Word file created by C#
What's the difference between .ToConstructor and .ToMethod in Ninject 3?
SQLite: .Net much slower than native?
I want to learn how to program 3D/2D applications (Games) in C#. What should I read? [closed]
Splitting a SQL String per Command
Assigning values to richtextbox [closed]
C# How to use multiple interface implementations
how to create an ASP.NET Web Page to manage folders and files for loading and reading to an external server?
Thread safe calls to windows form are freezing the application
A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property
Is it possible to create bidirectional relationships using only data annotations with EF Code First?
Do not unsubscribe from COMObject events can cause memory leak although I use Marshal.FinalReleaseComObject?
Parent-Child Matrix Chaining/Order Hierarchy
Invoke a non generic method with generic arguments defined in a generic class
Display ticket remaining time
Can't call Click Event on dynamic button

Categories

HOME
oauth-2.0
qlikview
classification
max
display
casting
salesforce-lightning
ms-access-2010
angularjs-directive
powerquery
liquidsoap
python-3.4
subprocess
cracking
select2
react-select
k-means
virtuemart
openoffice-basic
klipfolio
connection-pooling
gsuite
aspxgridview
android-xml
priority-queue
pydub
formtastic
typeclass
checkmarx
2checkout
mobile-development
foxpro
imdb
microstrategy
ilog
webclient
webmock
gitosis
intersection
cocoa-scripting
nscollectionview
mockserver
java-5
mtm
uitextview
php-mongodb
intervention
runner
hdpi
pyopenssl
history
opticalflow
critical-section
android-tabs
eclipse-mars
require-handlebars
vga
jigsaw
boost-bind
razorengine
archiva
mod
trendline
std
cascading
wiql
gulp-cdnizer
jain-sip
pagecontrol
vensim
cakephp-2.6
indices
fedena
nsmutableurlrequest
xpand
pthreads-win32
starling-framework
boofcv
mencoder
playing-cards
usersettings
codeigniter-form-helper
volatility
tasklist
invalidoperationexception
netzke
google-email-audit-api
bindinglist
optimistic-concurrency
ruby-1.9
cherokee
vectorwise
recess
marathontesting
subdirectories
browser-state
xslt-grouping
code-golf
hp-trim
high-load

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App