Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TService запускается в WinXP, но WinServer2008, сообщение отказано в доступе, код 5 
:(
    Опции темы
prgmdelphi
  Дата 27.6.2014, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



Добрый день. Ранее для определенных задач был написан собственный сервис (наследник от TService). Все было хорошо сервис без проблем работал в WinXP, но встала задача запустить его на Windows Server 2008. Сервис установился в службы, но вот при попытке его запуска выдается сообщение мол нет доступа код ошибки 5. В реестре для пользователей этого сервиса назначил максимальные права, все равно ошибка доступа. Вот думаю может что-то в Win Server 2008 изменилось и теперь требуется другой подход работы с сервисами?
Не вдаваясь в подробности, логика работы сервиса у меня была такой - если запуск MyService.exe происходил с параметром /INSTALL или /UNINSTALL то все сводилось к вызову некого моего метода Execute, который собственно создавал TMyService - наследник TService, а именно:
Код

if not SvcMgr.Application.DelayInitialize or SvcMgr.Application.Installing then
  SvcMgr.Application.Initialize;
SvcMgr.Application.CreateForm(TMyService, MyService);
SvcMgr.Application.Run;

Но помимо базовых параметров /INSTALL или /UNINSTALL  были свои собственные параметры /START /STOP (старт и остановка сервиса). Они позволяли пользователю управлять сервисом из под командной строки, например, MyService.exe /START приводил к запуску сервиса.
Старт сервиса делался в целом так (не стал здесь приводить целый класс, поэтому упростил код, чтобы минимизировать размер):
Код

 ServiceControlManager := OpenSCManagernil, nil, SC_MANAGER_ALL_ACCESS);
 if (ServiceControlManager <> 0) then
 begin
   ServiceHandle := OpenService(ServiceControlManager, 'MyService', SERVICE_ALL_ACCESS);
   if (ServiceHandle <> 0) then 
     WinSvc.StartService(ServiceHandle, 0, ServiceArgVectors); // ServiceArgVectors == nil
 end;

Так вот при вызове WinSvc.StartService-возвращается, что мол нет доступа.
PM MAIL   Вверх
kami
Дата 27.6.2014, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(prgmdelphi @  27.6.2014,  15:48 Найти цитируемый пост)
 В реестре для пользователей этого сервиса назначил максимальные права, 

Это как? Сервис запускается под учеткой конкретного пользователя?
Обычно они инсталлируются и работают под LocalService.
Может, эта служба еще и отображать что-то на рабочем столе пытается (т.е. установлено Interactive)? smile

Добавлено через 2 минуты
А если попытаться запустить сервис из под пользователя (пусть даже и админа) без повышения прав - конечно будет Access Denied.
Да и кроме того - зачем эти Start|Stop? Чем не устраивает net start myservicename ?
PM MAIL WWW   Вверх
prgmdelphi
  Дата 27.6.2014, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



Цитата(kami @  27.6.2014,  16:03 Найти цитируемый пост)
Это как?

Очень просто - когда инсталируется сервис в реестре создается группа с именем нашего сервера
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\имя_сервиса
так вот на эту папке можно назначать права.

Когда мой сервис отказался запускаться, то я и попробовал добавить прав, но все равно это не помогло.
Цитата(kami @  27.6.2014,  16:03 Найти цитируемый пост)

Может, эта служба еще и отображать что-то на рабочем столе пытается (т.е. установлено Interactive)? smile

Нет


[quote=kami, 27.6.2014,  16:03, post2614979]А если попытаться запустить сервис из под пользователя (пусть даже и админа) без повышения прав - конечно будет Access Denied.
без повышения прав - права на эту группу дал "Полный доступ" даже обычным пользователям, все равно не помогает

Цитата(kami @  27.6.2014,  16:03 Найти цитируемый пост)

Да и кроме того - зачем эти Start|Stop? Чем не устраивает net start myservicename ? 

Нужны
PM MAIL   Вверх
PointerToNil
Дата 28.6.2014, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 17.6.2013

Репутация: нет
Всего: 6



дык, может быть, у пользователя, который запускает MyService.exe /START, нет прав на запуск сервисов? 

и причем тут права на ветку реестра? (это её вы группой назвали?) не при ее чтении/записи же ошибка-то возникает
PM MAIL   Вверх
prgmdelphi
Дата 28.6.2014, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 13.5.2014

Репутация: нет
Всего: нет



А ларчик просто открывался...
нужно прогу (Far, cmd и т.п.), в которой мы будем запускать наш сервис MyService.exe /START запустить через меню от админа, даже если твой пользователь сам админ.
Да и еще немаловажно, чтобы на папке где храниться наш файл MyService.exe был доступ, а именно по умолчанию добавлена группа "Администраторы" и полные правы. В противном случае уже ничего не поможет

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  RunAsAdmin.png 4,90 Kb
PM MAIL   Вверх
kami
Дата 30.6.2014, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(kami @  27.6.2014,  16:03 Найти цитируемый пост)
 если попытаться запустить сервис из под пользователя (пусть даже и админа) без повышения прав - конечно будет Access Denied.

Цитата(prgmdelphi @  28.6.2014,  12:16 Найти цитируемый пост)
нужно прогу (Far, cmd и т.п.), в которой мы будем запускать наш сервис MyService.exe /START запустить через меню от админа, даже если твой пользователь сам админ.


<offtop>
 - Алло, техподдержка? У меня компьютер пишет "нажмите любую клавишу"!!! Что делать?
 - Ну, а вы нажимали?
 - Нет, как-то не догадался...
</offtop>
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.