Tutorials Forums
     Tutorials Videos
        Sign Up Now For FREE
Welcome, Guest
Username Password: Remember me

Query hardware device status
(1 viewing) (1) Guest
A programming language that evolved in part from Microsoft C++, C# was designed for building enterprise-level applications that run on the .NET Framework. C# is simple, modern, type safe, and object oriented. Whether you’re new to the language or an old pro, you’ll find articles in this section that will help you get your projects done.
  • Page:
  • 1

TOPIC: Query hardware device status

Query hardware device status 07 Feb 2010 17:50 #265

Introduction
To put it simple: if you want to query hardware device status in .NET, the ManagementObjectSearcher is your friend. Using it properly is a bit difficult, but it's not that bad.

Full Size Image
Background
My task was to create a hardware device health monitor service for a high availability server that runs an important .NET application. Since the environment already had .NET framework installed, I decided to write the health monitor in C#, and that’s where hell broke loose.

I spent a day searching the Internet for a native .NET way to query the hardware status, with no avail. At the end of the day, I found the ManagementObjectSearcher class, but I didn’t have any clues on the valid search terms. After a long search session, I bumped into a Chinese page (yes, I was that desperate) that showed a list of valid terms and a truckload of Chinese characters.

I wrote a small program that listed all the ManagementObjects in all the valid ManagementObjectSearchers, and bingo! The winner was contestant number 135: Win32_PnPEntity. With this in my hand, I could Google for the valid attributes and create the following sample.
Using the code
Our code is a simple console application that lists all the available devices and tells whether it's working according to the device status. To use it, you have to reference the System.Management component.

So, the actual code:
// Query the device list trough the WMI. If you want to get
// all the properties listen in the MSDN article mentioned
// below, use "select * from Win32_PnPEntity" instead!
ManagementObjectSearcher deviceList =
new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity");
 
// Any results? There should be!
if ( deviceList != null )
// Enumerate the devices
foreach ( ManagementObject device in deviceList.Get() )
{
// To make the example more simple,
string name = device.GetPropertyValue("Name").ToString();
string status = device.GetPropertyValue("Status").ToString();
 
// Uncomment these lines and use the "select * query" if you
// want a VERY verbose list
// foreach (PropertyData prop in device.Properties)
// Console.WriteLine( "\t" + prop.Name + ": " + prop.Value);
 
// More details on the valid properties:
// http://msdn.microsoft.com/en-us/library/aa394353(VS.85).aspx
Console.WriteLine( "Device name: {0}", name );
Console.WriteLine( "\tStatus: {0}", status );
 
// Part II, Evaluate the device status.
bool working = (( status == "OK" ) || ( status == "Degraded" )
|| ( status == "Pred Fail" ));
 
Console.WriteLine( "\tWorking?: {0}", working );
}

PPLIES TO

Microsoft Visual C# .NET 2002 Standard Edition
Microsoft Visual C# 2005 Express Edition
Microsoft Visual C# 2008 Express
This attachment is hidden for guests. Please log in or register to see it.
This attachment is hidden for guests. Please log in or register to see it.
Attachments:
  • Attachment This attachment is hidden for guests. Please log in or register to see it.
  • Attachment This attachment is hidden for guests. Please log in or register to see it.
  • CE
  • OFFLINE
  • Administrator
  • Posts: 197
  • Karma: 77
CodersEngine
  • Page:
  • 1
Moderators: mnjon
Time to create page: 0.75 seconds