Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2015, 14:13   #1
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию Удаление службы Delphi

Подскажите, чего то не понимаю... Пишу деинсталлятор для своей программы.

Пытаюсь удалить (предварительно остановленую) службу из своей программы
Код:
RunAsAdmin (0, GetAppData+'\SFS\StartSe.exe' ,'/uninstall') ;
RunAsAdmin - процедура запуска сторонней программы от им. админа

высвечивается уведомление windows о том что служба удалена, но по факту, она удаляется только после закрытия моей программы которая инициировала удаление службы...
Пробовал даже со своей программы запускать другую программу которая удаляет службу.. Промежуточная программа закрывается, но сервис по прежнему ждет закрытия программы инициатора)


Служба которую удаляю так-же написана в делфи... Получается нужно капать код удаления службы который Delphi автоматом создает для удаления службы(service.exe /uninstall)? Или делать своей собственный не палагаясь на delphi

Последний раз редактировалось aesoem; 30.09.2015 в 14:21.
aesoem вне форума Ответить с цитированием
Старый 30.09.2015, 17:38   #2
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию

проблема найдена...
Я проверяю запущена ли служба этой функцией....

Код:
function StatusStartService:Boolean;
var ssStatus: SERVICE_STATUS;
    schSCManager: SC_HANDLE;
    schService: SC_HANDLE;
begin

  try
  schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  if schSCManager=0 then RaiseLastOSError;
  schService:=OpenService(schSCManager,'SFSS'#0,SERVICE_ALL_ACCESS);
  if schService=0 then RaiseLastOSError;
  if(QueryServiceStatus(schService,ssStatus)) then begin
    case ssStatus.dwCurrentState of
      SERVICE_STOPPED: result:=false;
      SERVICE_RUNNING: result:=true;
    end;
  end;
  except
                         result:=false;
  end;
end;
после того как функция отрабатывает, она держит сервис и не дает ему закрыться...
что нужно сюда добавить чтобы функция отпустила сервис? что то с хендлом связано
_______________________________
Всем спасибо, косяка впарол...
забыл про CloseServiceHandle
кому интересно, вот рабочий код проверки
Код:
function StatusStartService:Boolean;
var ssStatus: SERVICE_STATUS;
    schSCManager: SC_HANDLE;
    schService: SC_HANDLE;
begin

  try
  schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  if schSCManager=0 then RaiseLastOSError;
  schService:=OpenService(schSCManager,'SFSS'#0,SERVICE_ALL_ACCESS);
  if schService=0 then RaiseLastOSError;
  if(QueryServiceStatus(schService,ssStatus)) then begin
    case ssStatus.dwCurrentState of
      SERVICE_STOPPED: result:=false;
      SERVICE_RUNNING: result:=true;
    end;
  end;
  except
                         result:=false;
  end;
  CloseServiceHandle(schService);
end;

Последний раз редактировалось aesoem; 30.09.2015 в 17:56.
aesoem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание службы в Delphi aesoem Общие вопросы Delphi 9 02.10.2015 14:02
Службы 5cek Общие вопросы Delphi 5 29.08.2014 12:52
Службы Bat{CMD}_Men Общие вопросы Delphi 0 04.10.2009 14:50
Как запускать службы через Delphi Kastor Безопасность, Шифрование 3 04.04.2007 20:26
службы bloood Общие вопросы C/C++ 1 02.04.2007 02:04