Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с TService


Nemec ©   (2007-05-04 22:11:00) 

Здравствуйте мастера. Такая проблема. Сервис по событию выключает компьютер. До сиз пор проблем не было. Теперь в силу обстоятельств, сервис запускается из под учетной записи (на компе она является адмиром). Комп перестал выключатся пока не войдешь в систему. Может кто подскажет как с этим справиться. Заранее спасибо.


Leonid Troyanovsky   (2007-05-05 14:37:00) [1]


> Nemec ©   (05.05.07 14:12) [4]

> А может я дурак, чего не понимаю!!!

Видимо, ExitWindowsEx должно быть из интерактивной станции.
Попробуй вместо него InitiateSystemShutdown
(после установки прав).

--
Regards, LVT.


Nemec   (2007-05-05 14:12:00) [2]

Спасибо Леонид за ссылку. Но дело в том, что привилегии получаются, функция ExitWindowsEx похоже выполняется (в логе пусто) и вся эта фишка отлично работала и работает под системной учетной записью. Проблема как раз в том, что если я запускаю сервис от имени пользователя (пусть даже этот пользователь админ), все это почему-то не хочет работать, пока не войдешь в систему.
А может я дурак, чего не понимаю!!!


Leonid Troyanovsky   (2007-05-05 12:15:00) [3]


> Nemec ©   (05.05.07 11:34) [2]

http://groups.google.com/group/fido7.ru.delphi/msg/4f6cb6c1e2e77ec7

--
Regards, LVT.


Nemec   (2007-05-05 11:34:00) [4]

Использую следующий код:
function TService1.WinExit(iFlags: integer): boolean;
//   возможные флаги:
//   EWX_POWEROFF + EWX_FORCE
//   EWX_LOGOFF
//   EWX_REBOOT
//   EWX_SHUTDOWN
begin
 Result := True;
 If SetPrivilege('SeShutdownPrivilege', true)
 Then
 begin
   WriteLn (F, 'Привилегии получены');
   Try
     If not ExitWindowsEx(iFlags, 0)
     Then
     begin
       WriteLn(F, IntToStr(GetLastError()));
       Result := False;
     end;
   except
     WriteLn(F, IntToStr(GetLastError()));
   end;
   SetPrivilege('SeShutdownPrivilege', False)
 end
 else
 begin
   Result := False;
 end;
end;

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


Nemec   (2007-05-04 22:13:00) [5]

Использую ExitWindowsEx, привилегии даются.


Наверх

Титульная страница Поиск, карта сайта Написать письмо