I have used this in my application and hope it will help u too:
I dont know how gud it is but have created it on my own and can search upto 5 partitions in a computer system
Just call this method in post back or wherever u want to.
public string fn_GetHddDetails()
{
int int_Flag = 0;
double dbl_FreeSpace;
double dbl_HddSize;
String str_HddUtilization = string.Empty;
try
{
//ManagementScope scope = new ManagementScope("\\\\127.0.0.1\\root\\cimv2");
//scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT FreeSpace,Name, Size FROM Win32_LogicalDisk where DriveType = 3");
ManagementObjectSearcher searcherdisk = new ManagementObjectSearcher(query);
ManagementObjectCollection queryCollection = searcherdisk.Get();
foreach (ManagementObject queryObjdisk in queryCollection)
{
if (queryObjdisk["FreeSpace"] != null)
{
int_Flag++;
if (int_Flag == 1)
{
string name = Convert.ToString(queryObjdisk["Name"]);
dbl_FreeSpace = Convert.ToDouble(queryObjdisk["FreeSpace"]);
dbl_HddSize = Convert.ToDouble(queryObjdisk["Size"]);
str_HddUtilization = name + Convert.ToString(System.Math.Round(((dbl_HddSize - dbl_FreeSpace) / dbl_HddSize) * 100,2)) + "%";
}
else if (int_Flag == 2)
{
string name = Convert.ToString(queryObjdisk["Name"]);
dbl_FreeSpace = Convert.ToDouble(queryObjdisk["FreeSpace"]);
dbl_HddSize = Convert.ToDouble(queryObjdisk["Size"]);
str_HddUtilization += ", " + name + Convert.ToString(System.Math.Round(((dbl_HddSize - dbl_FreeSpace) / dbl_HddSize) * 100, 2)) + "%";
}
else if (int_Flag == 3)
{
string name = Convert.ToString(queryObjdisk["Name"]);
dbl_FreeSpace = Convert.ToDouble(queryObjdisk["FreeSpace"]);
dbl_HddSize = Convert.ToDouble(queryObjdisk["Size"]);
str_HddUtilization += ", " + name + Convert.ToString(System.Math.Round(((dbl_HddSize - dbl_FreeSpace) / dbl_HddSize) * 100, 2)) + "%";
}
else if (int_Flag == 4)
{
string name = Convert.ToString(queryObjdisk["Name"]);
dbl_FreeSpace = Convert.ToDouble(queryObjdisk["FreeSpace"]);
dbl_HddSize = Convert.ToDouble(queryObjdisk["Size"]);
str_HddUtilization += ", " + name + Convert.ToString(System.Math.Round(((dbl_HddSize - dbl_FreeSpace) / dbl_HddSize) * 100, 2)) + "%";
}
else if (int_Flag == 5)
{
string name = Convert.ToString(queryObjdisk["Name"]);
dbl_FreeSpace = Convert.ToDouble(queryObjdisk["FreeSpace"]);
dbl_HddSize = Convert.ToDouble(queryObjdisk["Size"]);
str_HddUtilization += ", " + name + Convert.ToString(System.Math.Round(((dbl_HddSize - dbl_FreeSpace) / dbl_HddSize) * 100, 2)) + "%";
}
}
else if (queryObjdisk["FreeSpace"] == null && int_Flag == 0)
{
// "Server cannot be accessed";
}
}
return str_HddUtilization;
}
catch
{
//ex.Message.ToString();
return null;
}
finally
{
}
}
If u have to access other system's details then u must have a admin right account on that system and pass it on with options object like this:
ConnectionOptions options = new ConnectionOptions();
options.Username = username;
options.Password = password;
options.Authority = "ntlmdomain:UrDomain.com";