NullReferenceException в ServiceController.Stop - PullRequest
0 голосов
/ 14 апреля 2011

Чтобы иметь возможность проверить некоторую логику, связанную с мониторингом служб Windows, я создал оболочку ServiceController, которая в целом выглядит так:

public class ServiceControllerWrapper : IServiceController
{
    public ServiceControllerWrapper(ServiceController controller)
    {
        this.controller = controller;
    }

    public void Stop()
    {
        if(controller == null)
            return;

        // actually the following code is running in a new thread
        // but nothing more

        try
        {
            controller.Stop();
        }
        catch(...)
        {
            ...
        }
    }

    ... similar methods

    private readonly ServiceController controller;
}

Я позволил контроллеру быть нулевым, но все еще невозможно получить исключение NullReferenceException из-за проверки на нулевое значение в начале метода Stop.

Это происходит периодически, и я получаю исключение:

System.NullReferenceException В экземпляре объекта не задана ссылка на объект. в System.ServiceProcess.ServiceController.Stop ().

В настоящее время ошибка возникает только в 64-битной системе Win2008

Есть ли какие-либо ошибки, которые я совершаю, или причина того, что контроллер стал нулевым после проверки, чтобы он не был нулевым?

EDIT:

Помогло заглянуть внутрь кода ServiceController. Перед выполнением какой-либо операции со службами я вызываю контроллер. Обновить, и он работает хорошо.

1 Ответ

2 голосов
/ 14 апреля 2011

Это исключение похоже на то, что нулевая ссылка возникает внутри ServiceController.Stop(). Попробуйте использовать .NET Reflector, чтобы посмотреть, что происходит внутри этого метода.

...