C#-профи! HELP! -- HDD & WMI
От: Аноним  
Дата: 20.08.06 19:45
Оценка:
Есть необходимость получить информацию о ФИЗИЧЕСКИХ дисках на компе.
Для начала, хотя бы параметры... или хотя бы наличие, кол-во... и тыпы.
Но...
в среде .NET Framework(т.е. не на SDK-платформе), как я понимаю, нет возможности к такому роду действия иначе чем через посредство WMI.
Пролопатил WMI, как мог. Нашёл нн-ое кол-во примеров в инете. Массаррракшшш!...
ни один из примеров по использованию WMI (для примера, скажем, классов типа Win32_DiskDrive и т.п.) не дают успеха -- не работают...
Не могли бы Вы, уважаемые монстры C#-мира помочь мне ПОДРОБНЫМ примером (от шапки до последнего символа) на эту тему -- КАК с этой гадиной (WMI) работать??
Примечание: только чтобы шло на запуск... если что, укажите настройки какие надо.
Примечание2: -- простите за беспомощность


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: C#-профи! HELP! -- HDD & WMI
От: BluntBlind  
Дата: 21.08.06 02:33
Оценка:
Здравствуйте, 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();
    }
}


Выдает тот же список, который я выжу в списке "Мой Компьютер"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: C#-профи! HELP! -- HDD &amp; WMI
От: 78  
Дата: 21.08.06 07:24
Оценка:
Здравствуйте, BluntBlind, Вы писали:

BB>Здравствуйте, Hmmm, Вы писали:


H>>Есть необходимость получить информацию о ФИЗИЧЕСКИХ дисках на компе.

H>>Для начала, хотя бы параметры... или хотя бы наличие, кол-во... и тыпы.
H>>Но...
H>>в среде .NET Framework(т.е. не на SDK-платформе), как я понимаю, нет возможности к такому роду действия иначе чем через посредство WMI.

BB>
BB>class Program
BB>{
BB>    static void Main( string[] args )
BB>    {
BB>        foreach ( string drive in System.Environment.GetLogicalDrives() )
BB>            System.Console.WriteLine( drive );
            
BB>        Console.ReadLine();
BB>    }
BB>}
BB>


BB>Выдает тот же список, который я выжу в списке "Мой Компьютер"

Я так понимаю, что Hmmm интересуется именно "ФИЗИЧЕСКИМИ" накопителями, а не логическими дисками, которые доступны через GetLogicalDrives(). У меня, к примеру, дома один винчестер, который разбит на 2 логических раздела — C: и D:. Как узнать — сколько у меня в системе винчестеров программно из среды .NET'а?
Re: C#-профи! HELP! -- HDD &amp; WMI
От: Аноним  
Дата: 21.08.06 08:06
Оценка:
Спасибо за отклик, уважаемый BluntBlind, но если Вы внимательно посмотрели описание моей проблемы, то безусловно бы заметили, что меня интересуют не список логических дисков, а информация о ФИЗИЧЕСКИХ носителях информации -- грубо говоря, HARD DISK DEVICES.

Совершенно верно, уважаемый 78. Благодарю Вас за уделённое внимание.

Так всё же, кто-нибудь может помочь?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: C#-профи! HELP! -- HDD &amp; WMI
От: 78  
Дата: 21.08.06 08:16
Оценка:
Здравствуйте, Hmmm, Вы писали:
H>Совершенно верно, уважаемый 78. Благодарю Вас за уделённое внимание.

H>Так всё же, кто-нибудь может помочь?


Да не за что, собственно говоря, мне тоже крайне интересно, как можно эту информацию получить
Re: C#-профи! HELP! -- HDD &amp; WMI
От: BluntBlind  
Дата: 21.08.06 10:27
Оценка:
Здравствуйте, Hmmm, Вы писали:

Вот есть такой вариант, но он требует зборку microsoft.visualbasic.dll. Если тебя это не смущает ...

namespace TestConsole
{
    using Microsoft.VisualBasic;
    using System.IO;

    class Program
    {
        static void Main( string[] args )
        {
            foreach ( DriveInfo drive in Microsoft.VisualBasic.FileIO.FileSystem.Drives )
            {
                Console.WriteLine( drive.Name );
                Console.WriteLine( drive.DriveType );
                Console.WriteLine( "-----------------------------" );
            }

            Console.ReadLine();
        }
    }
}


Не забудь microsoft.visualbasic.dll в референсы добавить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: C#-профи! HELP! -- HDD &amp; WMI
От: GavrishDV  
Дата: 21.08.06 11:19
Оценка:
Здравствуйте, 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 &amp; 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" ] ) ) );
      }
    }


....
ЧТО ЗА СТРАННАЯ СТРОКА ВОЗВРАТА?! --
return ((AvailabilityValues)(System.Convert.ToInt32(curObj("Availability"])))


В каком формате её можно принять?!

Примечание: Таблица значений Availability принадлежит в CIM_DiskDrive — классе...
Но как эти данные получить?!! -- они же не дают отображения


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.