Есть необходимость получить информацию о ФИЗИЧЕСКИХ дисках на компе.
Для начала, хотя бы параметры... или хотя бы наличие, кол-во... и тыпы.
Но...
в среде .NET Framework(т.е. не на SDK-платформе), как я понимаю, нет возможности к такому роду действия иначе чем через посредство WMI.
Пролопатил WMI, как мог. Нашёл нн-ое кол-во примеров в инете. Массаррракшшш!...
ни один из примеров по использованию WMI (для примера, скажем, классов типа Win32_DiskDrive и т.п.) не дают успеха -- не работают...
Не могли бы Вы, уважаемые монстры C#-мира помочь мне ПОДРОБНЫМ примером (от шапки до последнего символа) на эту тему -- КАК с этой гадиной (WMI) работать??
Примечание: только чтобы шло на запуск... если что, укажите настройки какие надо.
Примечание2: -- простите за беспомощность
Здравствуйте, Hmmm, Вы писали:
H>Есть необходимость получить информацию о ФИЗИЧЕСКИХ дисках на компе. H>Для начала, хотя бы параметры... или хотя бы наличие, кол-во... и тыпы. H>Но... H>в среде .NET Framework(т.е. не на SDK-платформе), как я понимаю, нет возможности к такому роду действия иначе чем через посредство WMI.
class Program
{
static void Main( string[] args )
{
foreach ( string drive in System.Environment.GetLogicalDrives() )
System.Console.WriteLine( drive );
Console.ReadLine();
}
}
Выдает тот же список, который я выжу в списке "Мой Компьютер"
Здравствуйте, BluntBlind, Вы писали:
BB>Здравствуйте, Hmmm, Вы писали:
H>>Есть необходимость получить информацию о ФИЗИЧЕСКИХ дисках на компе. H>>Для начала, хотя бы параметры... или хотя бы наличие, кол-во... и тыпы. H>>Но... H>>в среде .NET Framework(т.е. не на SDK-платформе), как я понимаю, нет возможности к такому роду действия иначе чем через посредство WMI.
BB>
BB>Выдает тот же список, который я выжу в списке "Мой Компьютер"
Я так понимаю, что Hmmm интересуется именно "ФИЗИЧЕСКИМИ" накопителями, а не логическими дисками, которые доступны через GetLogicalDrives(). У меня, к примеру, дома один винчестер, который разбит на 2 логических раздела — C: и D:. Как узнать — сколько у меня в системе винчестеров программно из среды .NET'а?
Re: C#-профи! HELP! -- HDD & WMI
От:
Аноним
Дата:
21.08.06 08:06
Оценка:
Спасибо за отклик, уважаемый BluntBlind, но если Вы внимательно посмотрели описание моей проблемы, то безусловно бы заметили, что меня интересуют не список логических дисков, а информация о ФИЗИЧЕСКИХ носителях информации -- грубо говоря, HARD DISK DEVICES.
Совершенно верно, уважаемый 78. Благодарю Вас за уделённое внимание.
Здравствуйте, Hmmm, Вы писали:
H>Есть необходимость получить информацию о ФИЗИЧЕСКИХ дисках на компе. H>Для начала, хотя бы параметры... или хотя бы наличие, кол-во... и тыпы. H>Но... H>в среде .NET Framework(т.е. не на SDK-платформе), как я понимаю, нет возможности к такому роду действия иначе чем через посредство WMI. H>Пролопатил WMI, как мог. Нашёл нн-ое кол-во примеров в инете. Массаррракшшш!... H>ни один из примеров по использованию WMI (для примера, скажем, классов типа Win32_DiskDrive и т.п.) не дают успеха -- не работают... H>Не могли бы Вы, уважаемые монстры C#-мира помочь мне ПОДРОБНЫМ примером (от шапки до последнего символа) на эту тему -- КАК с этой гадиной (WMI) работать?? H>Примечание: только чтобы шло на запуск... если что, укажите настройки какие надо. H>Примечание2: -- простите за беспомощность
H>данное сообщение получено с www.gotdotnet.ru H>ссылка на оригинальное сообщение
есть еще такая штуковина...
class Sample
{
public static void Main()
{
ManagementClass c = new ManagementClass("Win32_SystemDriver");
if (c.GetInstances().Count>0)
foreach (ManagementObject o in c.GetInstances())
{
Console.WriteLine("Caption = {0} " +
"DisplayName = {1} PathName = {2}",
o["Caption"],
o["DisplayName"],
o["PathName"]);
}
Console.ReadLine();
}
}
Re: C#-профи! HELP! -- HDD & WMI
От:
Аноним
Дата:
21.08.06 16:46
Оценка:
For уважаемого BluntBlind:
Действительно, интересный вариант Спасибо.
Но всё же интересует вариант WMI-classe -- Win32_DiskDrive;
Я тут, наконец, нашёл пример в инете, разбираюсь, вроде адаптирую для класса Win32_DiskDrive. Вроде даже получается... :
class Program
{
static void Main( string[] args ) {
Console.WriteLine( " ------------ НАЧАЛО --------------- - Работа с диском процедура DiskDrive -" );
Console.WriteLine( "\n" );
System.Management.ManagementScope instManageScope =
new System.Management.ManagementScope( "", null );
System.Management.ObjectQuery instObjQuery =
new System.Management.ObjectQuery( "SELECT * FROM Win32_DiskDrive" );
System.Management.ManagementObjectSearcher collectManObjSearch =
new System.Management.ManagementObjectSearcher( instManageScope, instObjQuery );
System.Management.ManagementObjectCollection diffCollManObjSearch = collectManObjSearch.Get();
foreach( ManagementObject mo in diffCollManObjSearch ) {
Console.WriteLine( "Availability : " + mo[ "Availability" ] );
Console.WriteLine("BytesPerSector : "+mo["BytesPerSector"]);
Console.WriteLine( "Capabilities : " + mo[ "Capabilities" ] );
Console.WriteLine("\n");
}
}
}
Строку "BytesPerSector" -- выводит исправно.
Вместо остальных 2-х значений -- пусто.
Стал рыть глубже... чтобы выдать больше настроек-параметров -- и тут натыкаюсь на проблему своего незнания.
Смотрю сам исходник ROOT.CIMV2.Win32.DiskDrive класса и вижу такую вещь:
....
[Browsable( true )]
[DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )]
[Description( @"The availability and status of the device. For example,..." )]
[TypeConverter( typeof( WMIValueTypeConverter ) )]
public AvailabilityValues Availability
{
get
{
if( ( curObj[ "Availability" ] == null ) )
{
return ( ( AvailabilityValues ) ( System.Convert.ToInt32( 0 ) ) );
}
return ( ( AvailabilityValues ) ( System.Convert.ToInt32( curObj[ "Availability" ] ) ) );
}
}