Nano Hash - криптовалюты, майнинг, программирование

ServiceController.start() и ServiceController.stop() вызывают исключения?

Следующий код генерирует Exception. Я не понимаю, какую ошибку я делаю в коде. Может кто-нибудь помочь мне разобраться, пожалуйста. Я думаю, что это какая-то проблема с правами безопасности. Если да, то как я могу предоставить права безопасности любому пользователю или приложению для программного доступа к этой службе Windows?

Dim sc As New ServiceController        
sc.ServiceName = "DataLoad"   
If sc.Status = ServiceControllerStatus.Stopped Then     
    sc.Start()    
Else  
    sc.Stop()  
End If

Исключение:

System.InvalidOperationException: Cannot open DataLoad service on computer '.'. --->
System.ComponentModel.Win32Exception: Access is denied --- End of inner exception stack trace --- at
System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) at
System.ServiceProcess.ServiceController.Start(String[] args) at
System.ServiceProcess.ServiceController.Start() at
WEBSITE.DataLoad.Submit1_ServerClick(Object sender, EventArgs e) in C:\Inetpub\wwwroot\WEBSITE\a\DataLoad.aspx.vb:line 46

Благодарю вас!


Ответы:


1

Вы можете использовать инструмент subinacl для этого

SUBINACL /SERVICE \\MachineName\ServiceName /GRANT=[DomainName\]UserName[=Access] 

Чтобы быть конкретным для вашего случая:

subinacl /service DataLoad /GRANT=YOURDOMAIN\[User in appdomain for WEBSITE]=TO

Где TO означает
T : запустить службу
O : остановить службу

все варианты [Доступ]:

F : Полный контроль
R : Универсальное чтение
W : Универсальная запись
X : Универсальное выполнение
L : Управление чтением
Q : Запрос конфигурации службы
S : Запрос состояния службы
E : Перечислить зависимые службы
C : Изменить конфигурацию службы
T : Запустить службу
O : Остановить службу
P : Приостановить/продолжить службу
I : Опросить службу
U : Служба Пользовательские команды управления

См. метод 3 в этой статье базы знаний.

22.02.2011
  • Большое спасибо за ответ. Я был бы признателен, если бы вы могли объяснить, как сделать это по-другому (групповая политика или какой-либо другой способ) без использования стороннего кода. Благодарю вас! 23.02.2011
  • subinacl является частью набора ресурсов Windows. Я не считаю это сторонним кодом. microsoft.com/downloads/ ru/ 23.02.2011
  • вы можете попробовать установить разрешение с помощью инструмента «Локальная политика безопасности» (в разделе «Панель управления» > «Администрирование») и установить «Локальные политики» > «Назначения прав пользователя» > «Войти в систему как сервер». Теперь добавьте учетную запись из веб-пула приложений в этот список. 23.02.2011
  • В моем случае я продолжал получать эту ошибку: LookupAccountName: MySvc:pdsclocalsystem 1337 Структура идентификатора безопасности недействительна. Текущий объект MySvc не будет обрабатываться 03.02.2015

  • 2

    Я нашел решение этой проблемы, предоставив имя компьютера, на котором в данный момент выполняется служба, в перегруженном конструкторе ServiceController, который принимает 2 (два) аргумента, т. е. public ServiceController(/строка имени моей службы/ , System.Environment.MachineName/эта машина, на которой выполняется служба/)

    Версия .Net, на которой было протестировано это решение, была 4.5, надеюсь, это поможет тем, кто все еще ищет решение.

    Вот что вам нужно сделать в коде:

    ServiceController serviceController = new ServiceController("myServiceName", System.Environment.MachineName);
    
    27.06.2013
  • Это все еще может вызвать проблемы, запустив уже запущенную службу, если статус не изменился вовремя. 10.11.2013

  • 3

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

    Он ясно показывает, как вручную предоставить пользователю Windows права запускать и останавливать службы (или устанавливать другие разрешения):

    http://thommck.wordpress.com/2011/12/02/how-to-allow-non-admins-to-start-and-stop-system-services/

    08.11.2013

    4

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

    Сначала откройте mmc.exe, затем добавьте оснастки «Конфигурация и анализ безопасности» и «Шаблоны безопасности».

    введите здесь описание изображения

    Затем создайте новый пустой шаблон безопасности из элемента «Шаблоны безопасности», дайте ему имя и нажмите «ОК», чтобы сохранить его на локальном диске в удобном месте.

    Затем откройте «Конфигурация и анализ безопасности» и выберите «Открыть базу данных...», дайте ей имя и сохраните ее в том же каталоге, что и на предыдущем шаге. Когда появится окно «Импорт шаблона», откройте файл *.inf в том же каталоге.

    Затем щелкните правой кнопкой мыши «Конфигурация и анализ безопасности» и выберите «Анализ компьютера…». Появится следующее:

    введите здесь описание изображения

    Дважды щелкните «Системные службы», найдите и дважды щелкните свою службу, затем установите флажок «Определить эту политику в базе данных» и нажмите кнопку «Изменить безопасность».

    Здесь он отличается от того, что описано в ссылке @JOG, опубликованной, поскольку я использую Windows 8.1 — я включил «запуск, остановка и пауза» для «ИНТЕРАКТИВНЫЙ» и «СЛУЖБА».

    введите здесь описание изображения

    К вашему сведению, я выполнил вышеизложенное, следуя этому руководству, как предложил @JOG: and-stop-system-services/" rel="nofollow noreferrer">https://thommck.wordpress.com/2011/12/02/how-to-allow-non-admins-to-start-and-stop- системные службы/

    03.02.2015
  • Дополнительные детали в гиперссылке — это то, что наконец помогло мне пересечь финишную черту. Спасибо за это!! 29.04.2019

  • 5

    Если у вас уже есть пользователь службы как LocalSystem (пользователь с высокими привилегиями), проблема не в безопасности. Кроме того, у меня была эта проблема раньше, и ее статус vrs запускает ее снова или останавливает, когда она уже приказала остановить().

    Вы видите, что статус службы не изменяется по запросу, поэтому, даже если вы закодировали

    //this will start the process but the 
    //sc status will take some time to change
    //when that happens and you try to start 
    //the already started service it will give you 
    //your error
    servicec.start();
    

    Итак, вам нужно сделать это: msdn ServiceController.waitforstatus

     Dim sc As New ServiceController
         sc.ServiceName = "DataLoad"   
    If sc.Status = ServiceControllerStatus.Stopped     Then     
        sc.Start()    
     // this makes it wait for the status to change
      // and no it wont slow down anything at all. 
    sc.waitforstatus(ServiceControllerStatus.started)
    Else  
        sc.Stop()
    sc.waitforstatus(ServiceControllerStatus.stopped)
    End If
    

    Это решит вашу проблему так же, как и мою.

    10.11.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..