Проблемы System.Management.ManagementObjectSearcher

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Predator
Обычный пользователь
Обычный пользователь
 
Сообщения: 74
Зарегистрирован: 10.12.2002 (Вт) 18:55
Откуда: Russia

Проблемы System.Management.ManagementObjectSearcher

Сообщение Predator » 21.04.2010 (Ср) 8:25

При написании программы мне надо получить следующие данные

Код: Выделить всё
Dim diskClass As New System.Management.ManagementObjectSearcher("Select * FROM Win32_DiskDrive")
        Dim disk As System.Management.ManagementObject
        Dim s As String = ""
               For Each disk In diskClass.Get()
                     AAA(i) = disk("SerialNumber")
            i = i + 1

        Next disk


если на компе стоит Win7 то все ок
если на тот же комп поставить XP sp2-sp3 то данный код вызывает ошибку.

System.Management.ManagementException не обработано
Message="Не найден "
Source="System.Management"
StackTrace:
в System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) в System.Management.PropertyData.RefreshPropertyInfo() в System.Management.PropertyDataCollection.get_Item(String propertyName) в System.Management.ManagementBaseObject.GetPropertyValue(String propertyName) в System.Management.ManagementBaseObject.get_Item(String propertyName) в NLE_TEL.Menu_vb.loadsystem() в C:\Documents and Settings\likhoded\Рабочий стол\NLE TEL\NLE TEL\Menu_vb.vb:строка 17 в NLE_TEL.Menu_vb.Menu_vb_Load(Object sender, EventArgs e) в C:\Documents and Settings\likhoded\Рабочий стол\NLE TEL\NLE TEL\Menu_vb.vb:строка 307 в System.EventHandler.Invoke(Object sender, EventArgs e) в System.Windows.Forms.Form.OnLoad(EventArgs e) в System.Windows.Forms.Form.OnCreateControl() в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) в System.Windows.Forms.Control.CreateControl() в System.Windows.Forms.Control.WmShowWindow(Message& m) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.ScrollableControl.WndProc(Message& m) в System.Windows.Forms.ContainerControl.WndProc(Message& m) в System.Windows.Forms.Form.WmShowWindow(Message& m) в System.Windows.Forms.Form.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow) в System.Windows.Forms.Control.SetVisibleCore(Boolean value) в System.Windows.Forms.Form.SetVisibleCore(Boolean value) в System.Windows.Forms.Control.set_Visible(Boolean value) в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) в System.Windows.Forms.Application.Run(ApplicationContext context) в Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() в Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() в Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) в NLE_TEL.My.MyApplication.Main(String[] Args) в 17d14f5c-a337-4978-8281-53493378c1071.vb:строка 81 в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context(Object state) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) в System.Threading.ThreadHelper.ThreadStart()
InnerException:


в чем косяк?
Последний раз редактировалось Predator 21.04.2010 (Ср) 10:25, всего редактировалось 2 раз(а).
все будет хорошо или нет тогда все будет плохо...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Проблемы System.Management.ManagementObjectSearcher

Сообщение MIT » 21.04.2010 (Ср) 8:30

Что за ошибка мы, видимо, должны угадать?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Проблемы System.Management.ManagementObjectSearcher

Сообщение 1Steps » 22.04.2010 (Чт) 0:55

В ХР этот код не сработает пока не добавишь референс(System.Management) в проэкт.
Но для полного ответа нужно видеть весь код.
Удалена за ненадобностью.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Проблемы System.Management.ManagementObjectSearcher

Сообщение 1Steps » 22.04.2010 (Чт) 1:08

Да и вообще, что бы получить сериал номер, нужно проделать не слабые телодвижения.
У меня это происходит так:
Код: Выделить всё
        Dim _mbo As ManagementBaseObject
        Dim _mo As ManagementObject

        If TypeOf obj Is ManagementBaseObject Then
            _mbo = CType(obj, ManagementBaseObject)
            _caption = _mbo("Caption").ToString
            _name = _mbo("Name").ToString
        Else
            _mo = CType(obj, ManagementObject)
            _caption = _mo("Caption").ToString
            _name = _mo("Name").ToString
        End If

        If ejected Then Exit Sub

        _name = Replace(_name, "\", "\\")
        Dim partitionQuery As New ObjectQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _name & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
        Dim diskQuery As ObjectQuery
        Try
            For Each partition As ManagementObject In New ManagementObjectSearcher(partitionQuery).Get()
                diskQuery = New ObjectQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & partition("DeviceID").ToString & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
                For Each disk As ManagementObject In New ManagementObjectSearcher(diskQuery).Get()
                    _name = disk("Name").ToString
                Next
            Next
            _mo = New ManagementObject("Win32_LogicalDisk.DeviceID='" & _name & "'")
            _mo.Get()
            _volumeName = _mo("VolumeName").ToString
            _serialNumber = _mo("VolumeSerialNumber").ToString
            _totalSize = _mo("Size").ToString
            _freeSpace = _mo("FreeSpace").ToString
        Catch err As ManagementException
            MessageBox.Show(err.Message)
        End Try

ХР, FW 3.5, 2008, SP3
Удалена за ненадобностью.

Predator
Обычный пользователь
Обычный пользователь
 
Сообщения: 74
Зарегистрирован: 10.12.2002 (Вт) 18:55
Откуда: Russia

Re: Проблемы System.Management.ManagementObjectSearcher

Сообщение Predator » 22.04.2010 (Чт) 8:56

1Steps писал(а):В ХР этот код не сработает пока не добавишь референс(System.Management) в проэкт.

она там есть....

Код: Выделить всё
Dim diskClass As New System.Management.ManagementObjectSearcher("Select * FROM Win32_DiskDrive")
        Dim disk As System.Management.ManagementObject
        Dim s As String = ""
   
        For Each disk In diskClass.Get()
                AAA(i) = disk("SerialNumber")
            i = i + 1
       Next disk


это и есть весь участок кода
в переменную AAA(i) мне надо получить список все серийников хардов компа.

я воткнул туда другую переменную и код сработал.
http://msdn.microsoft.com/en-us/library/aa394132%28VS.85%29.aspx

может как то можно без ядреного кода решить задачу? я просто в Win32_DiskDrive Class не нашел VolumeSerialNumber?
все будет хорошо или нет тогда все будет плохо...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Проблемы System.Management.ManagementObjectSearcher

Сообщение MIT » 22.04.2010 (Чт) 9:08

Predator писал(а):может как то можно без ядреного кода решить задачу?
Что в твоём понимании есть ядерный код?
Predator писал(а):я просто в Win32_DiskDrive Class не нашел VolumeSerialNumber
А я нашёл. Правда SerialNumber там не Volume, а физический.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Predator
Обычный пользователь
Обычный пользователь
 
Сообщения: 74
Зарегистрирован: 10.12.2002 (Вт) 18:55
Откуда: Russia

Re: Проблемы System.Management.ManagementObjectSearcher

Сообщение Predator » 23.04.2010 (Пт) 10:10

XP почему то не находит SerialNumber.... - физический...
а мне нужно получить именно его... и желательно именно таким способом перебором всех HDD И помещением их в массив данных...
все будет хорошо или нет тогда все будет плохо...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList