Запустите удаленный сервис из C # - PullRequest
5 голосов
/ 12 июля 2010

Я использую следующий код в приложении C # WinForms для запуска служб Windows на удаленном ПК

    public static List<Service> GetServices()
    {
        List<Service> Services = new List<Service>();
        ServiceController[] sc = ServiceController.GetServices(Server);
        foreach (var s in sc)
        {
           Services.Add(new Service { Name = s.ServiceName, Running = s.Status == ServiceControllerStatus.Running });
        }
        return Services;
    }

    public static bool StartService(string ServiceName)
    {
        try
        {
            ServiceController sc = new ServiceController(ServiceName, Server);
            sc.Start();
            sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10));
            sc.Refresh();
            return sc.Status == ServiceControllerStatus.Running;
        }
        catch(Exception ex) { return false; }
    }

Метод GetServices отлично работает, когда указывает на мой локальный ПК или на удаленный ПК.Однако метод StartService работает только на моем локальном ПК, при запуске на удаленном ПК доступ запрещен.В этом случае удаленный ПК является машиной с Windows XP pro в том же домене, и у пользователя, под которым я запускаю приложение, есть права локального администратора.

Я не уверен, что это проблема смой код или если мои права доступа не верны.

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 12 июля 2010

Если получится, вам просто нужно разрешение на запуск и остановку оконных служб, вместо того, чтобы иметь права администратора, вы можете изменить DACL службы.

Есть два основных способа сделать это.

1) Выполнение строки языка определения дескриптора безопасности (SDDL).

2) Наследовать от NativeObjectSecurity и применять изменения DACL во время метода ServiceInstaller_AfterInstall.

0 голосов
/ 06 августа 2010

Оказывается, это была проблема с разрешениями.Я проводил тестирование на виртуальной машине, и у наших виртуальных машин были разные права доступа к нашему домену.

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