У меня проблемы с приложением, которое я разрабатываю.Вот сценарий: у меня есть две службы Windows (служба A и служба B), написанные на C #.
Служба A отвечает за передачу данных между двумя приложениями (с использованием веб-служб, FTP-соединений и т. Д.).Он также отвечает за обновление службы B.
Служба B отвечает за обновление службы A и обновление веб-приложения.
Основная операция обновлений заключается в (допустим, это процесс обновления службыA, выполняется службой B):
- Проверка обновлений через WebServices
- Если есть новая версия, остановите службу (используя C # ServiceController).
- Резервное копирование текущих файлов службы (чтобы я мог выполнить откат, если что-то пойдет не так)
- Удаление службы (с помощью команды sc delete)
- Загрузка обновленных файлов службы (с использованием FTP-соединения).)
- Выполнение некоторых сценариев SQL Server, если они существуют
- Установка службы Windows (с помощью команды sc create)
- Запуск службы (с помощью C # ServiceController)
Все идет гладко до шага 7. Я понял, что проблема в том, что пользователь, выполняющий обновление (пользователь, запускающий Службу B), не имеет прав для создания новых окон Windows.пороки, поэтому SC Create всегда возвращает что-то вроде «[SC] OpenSCManager FAILED 5: Доступ запрещен». Обратите внимание, что у меня были обе службы, работающие с учетной записью LocalSystem.Итак, я решил, что эта учетная запись не может создавать новые службы Windows (поправьте меня, если я ошибся).
После этого я создал нового пользователя Windows, просто для запуска служб.Идея заключалась в том, чтобы дать этому пользователю необходимые разрешения (для общего доступа к сети, файлов и создания служб).Однако этот пользователь по-прежнему не может создать службу.
Вот что я пробовал:
- Предоставьте пользователю полномочия cmd.exe и sc.exe (с использованием CACLS).
- Используйте PsExec для непосредственного запуска cmd (с -i -s) вместо cmd.exe.
- С помощью команды SubInAcl , чтобы пользователь имел права доступа к обоим WindowsОбслуживание.Но в том-то и дело, что в то время у меня нет Службы, поэтому она не работает.
Некоторые замечания:
- Эти Службы Windows неесть любой установщик.
- Команда SC запускается с использованием C # ProcessStartInfo.
- Команда SC указывает имя пользователя и пароль пользователя Windows, которого я создал.
- Я действительно не могухочу, чтобы службы Windows запускались под учетной записью пользователя с правами администратора.
Я знаю, что этот поток похож на уже существующий Автообновление службы Windows , однако яне могу найти ни одного рабочего решения нигде.
Извините за длинный текст