Ошибка нулевой ссылки при добавлении служб, работающих на терминальном сервере, в словарь - PullRequest
0 голосов
/ 12 января 2012

В VB.NET я пытаюсь определить, какие службы запущены на TS, используя следующий код:

Imports System.ServiceProcess
...
Dim dictservice As Generic.Dictionary(Of String, Services)

Public Sub GetService()
    Dim localServices As ServiceController() = ServiceController.GetServices()
    For Each service As ServiceController In localServices
        dictservice.Add(service.DisplayName, New Services(service.DisplayName, service.ServiceName, service.Status.ToString))
    Next
End Sub

Мой класс услуг выглядит следующим образом:

Class Services
    Private _displayName As String
    Private _serviceName As String
    Private _serviceStatus As String

    Sub New(ByVal DisplayName As String, ByVal ServiceName As Object, ByVal ServiceStatus As String)
        _displayName = DisplayName
        _serviceName = ServiceName
        _serviceStatus = ServiceStatus
    End Sub

    Public Overrides Function ToString() As String
        Return _serviceStatus
    End Function
End Class

Когда я вхожу в режим отладки, кажется, что он заполняет словарь отображаемое имя: опыт применения Название сервиса: AElookUpSVC статус услуги: работает (4)

Когда он пытается перейти к следующему элементу, я получаю следующую ошибку:

Исключение нулевой ссылки не обработано: Ссылка на объект не установлена ​​для экземпляра объекта.

Я не могу на всю жизнь понять, где найти нулевую ссылку?

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Вам нужно инициализировать ваш словарь с New:

Dim dictservice As <b><i>New</i></b> Generic.Dictionary(Of String, Services)

Public Sub GetService()
    Dim localServices As ServiceController() = ServiceController.GetServices()
    For Each service As ServiceController In localServices
        dictservice.Add(service.DisplayName, New Services(service.DisplayName, service.ServiceName, service.Status.ToString))
    Next
End Sub

Сейчас это Nothing, следовательно, NullReferenceException.

1 голос
/ 10 января 2012

Наиболее вероятной проблемой является то, что dictService - это Nothing, и, следовательно, вы получаете NullReferenceException.Где вы инициализируете / объявляете dictService и уверены ли вы, что инициализация происходит до этого метода?

Если это не проблема, вы пытались запустить ее с подключенным отладчиком?это должно указать вам на линию, которая терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...