Запустите удаленный сервис с C#

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

    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.

Спасибо

5
задан Gavin 12 July 2010 в 08:27
поделиться

1 ответ

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

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

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

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

4
ответ дан 15 December 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: