Остановка службы в C # без повышения прав - PullRequest
1 голос
/ 25 октября 2011

Мне нужно иметь возможность отключить службу через exe-файл, который можно вызвать из стороннего программного обеспечения, поэтому я подумал, что я бы хотел быстрое решение с помощью C #.

Я пытаюсь использовать следующий кодчто я нашел в Интернете, чтобы остановить службу, но она не будет работать, если я не запустил exe как администратор (что в идеале я не хочу делать, поскольку я пытаюсь получить это как пятно)

public static void StopService(string serviceName, int timeoutMilliseconds)
    {
        ServiceController service = new ServiceController(serviceName);
        service.MachineName = ".";
        try
        {
            TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

            service.Stop();
            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
        }
        catch
        {
            // ...
        }
    }

есть ли необходимость в возвышении?

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

В отдельных сервисах есть списки контроля доступа.Вы можете предоставить права конкретным пользователям или группам, чтобы иметь возможность закрыть / запустить конкретную службу.Вы можете получить инструмент строки cmd «subinacl» для установки acl от Microsoft: http://www.microsoft.com/download/en/details.aspx?id=23510 Обратите внимание, что вы можете предоставить права на отключение службы без предоставления прав на запрос конфигурации службы.

2 голосов
/ 25 октября 2011

Подумайте об этом следующим образом: какой смысл было бы для всей системы безопасности, если бы были способы обойти это?

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

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

1 голос
/ 25 октября 2011

Вы можете установить свой собственный «сервис-пробка», который взаимодействует с выделенным файлом .exe или любым приложением, которое знает, как взаимодействовать с этим сервисом (например, через именованные каналы).

Так что все ваше приложение/.exe делает это, сигнализируя этой службе, что она должна остановить / перезапустить и т. д. конкретную службу.

Если вы хотите остановить только свои собственные службы, вы можете рассмотреть возможность интеграции таких функций обмена сообщениями, поэтомуВы сможете управлять им без прав администратора.

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

Надеюсь, это поможет.

...