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

Is this design using dynamic okay?
Using data connections in Visual Studio to explore SQL Server Express database
Reflection : get static property name
Show loading panel on index action of ASPNET MVC
Enumerate files in mapped drive
JavaScript function return boolean in C#
Ajax.BeginForm: What to return from controller to prevent page refresh?
Global access to variables and properties for a C# Excel add in
dynamic data to Jquery code in ASP .Net Visual Studio
c# mysql wait for previous query to finish
How to embed a c# app to SP website without Microsoft.SharePoint.Client.dll?
String manipulation to create email address from first and last name at least 4 times
The name does not exist in the current context (specific case)
Image upload quality bad
How to redirect a WCF to an external URL (Google AdWords Sign In) and handle the response?
How to diagnose a corrupted suffix pattern in a mixed managed/unmanaged x32 .NET application

Categories

HOME
joomla
algolia
android-ndk
glsl
azure-database-mysql
data-modeling
confluence-rest-api
powerquery
swap
jquery-select2
soap-client
suitecrm
tracking
hdf5
infopath
loss
glibc
polybase
aws-iot
ckeditor4.x
aws-certificate-manager
windows-10-mobile
spock
key-bindings
loopback
kubectl
client-server
iterm2
mockserver
julia-jump
quartz
f#-fake
logan-square
qtwebkit
django-tables2
standard-error
ear
extjs3
audio-fingerprinting
jenkins-docker
boost-regex
webmatrix
kendo-scheduler
trusted-computing
catalyst
firebase-polymer
glade
netlink
objectify
avaudiorecorder
mod
custom-build-step
wiql
jcomponent
borland-c++
mergecursor
data-quality-services
xcode5
launcher
qf-test
diffmerge
agent-based-modeling
pytz
amzi-prolog
ant-contrib
yandex-api
data-layers
nomachine
node-amqp
netbeans-plugins
randomaccessfile
friendly-id
azure-pack
jython-2.5
pudb
magicsuggest
simplemembership
nsregularexpression
teamsystem
webpage-screenshot
databus
blackberry-eclipse-plugin
github-archive
project-files
scsf
visual-leak-detector
cgaffinetransform
zend-validate
clgeocoder
digg
youtube.net-api
dongle
dgml
script-tag

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