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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2010, 10:31   #1
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
Счастье Создание службы Windows

Создание службы Windows.
Добрый день. Кто в курсе подскажите.
Создаю свою службу. Эта служба должна при запуске определить, какие программы запущены. Результат сохранить в файл. Службу установил, запускаю вручную, при запуске результат сохраняется. Но завершить запуск служба не может. Остается на этапе «Запуск». При этом, соответственно, невозможно сделать uninstall или остановить. Приходиться перезапускать комп.

Что нужно сделать, чтобы служба завершила запуск?

Вот пример кода.
Код:

unit Service;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, IniFiles;

type
  TService2 = class(TService)
  procedure ServiceStart(Sender: TService; var Started: Boolean);
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  Service2: TService2;
  f:TextFile;
  str : TStrings;
implementation

{$R *.DFM}
function EnumWindowsProc( WND: HWND): BOOL;   stdcall;
var
Text : string;
Textlength : Integer;
s: string;
begin
  Result := True;
  Textlength := SendMessage(WND, WM_GETTEXTLENGTH,0,0);
  SetLength(Text,Textlength);
  if Textlength>0 then
  begin
    SendMessage(WND,WM_GETTEXT,Textlength,LParam(Text));
   // Str.Add(Text);
   // Sleep(2000);
    s :=  'c:\\test.txt';
    AssignFile( f, s );
    if FileExists(s) then
    begin
      Append(f);
      Writeln(f,Text);
    end
    else
    begin
      Rewrite(f);
      Writeln(f,Text);
    end;
   CloseFile(f);  
  end;
end;


procedure TService2.ServiceStart(Sender: TService; var Started: Boolean);

begin
EnumWindows(@EnumWindowsProc,0);
end;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Service2.Controller(CtrlCode);
end;

function TService2.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

end.
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Старый 14.04.2010, 13:25   #2
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Насколько помню примерно так:
Сначала в самом сервисе останавливаем:
Код:
 Started:=False;// останавливаем сервис
Потом, в программе вызывающей сервис делаем кнопку для удаления сервиса с кодом:
Код:
   //отключаем сервис
   winexec (Pchar(Windowsdir+'\system32\service.exe -UNINSTALL -SILENT'), sw_show);
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 14.04.2010, 13:51   #3
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
По умолчанию

Мне не нужно отключать сервис. Он должен работать.
Загвоздка в том, что он стартует и процесс старта продолжается.

Проблема оказывается в EnumWindowsProc. У меня она возвращет всегда true;

EnumWindows, как мы знаем, занимается перечислением всех окнон верхнего уровня на экране и работает пока последнее окно верхнего уровня не будет перечислено, или пока функция повторного вызова не возвратит значение FALSE.
Если в функции EnumWindowsProc прописываю, чтобы,например, после третьего перечисления функция вернула false, то всё работает отлично. Только Получим всего три заголовка! А это не правильно.

Поблема в EnumWindows. Как остановить ее выполнение после перечисления всех окон?

Кто может знает как отлаживать при разработке сервисы. А то install / uninstall уже поднадоели.
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Службы Windows Pr1meEX Помощь студентам 5 08.06.2011 14:15
Создание GUI для WINDOWS inzener-tolik Помощь студентам 8 13.03.2010 11:39
Создание приложений Windows Application Александр Елис Помощь студентам 6 20.10.2009 22:24
создание Windows Forms Aplication b-e-s Общие вопросы C/C++ 15 04.08.2009 20:06
Создание службы в Windows goblinyara Общие вопросы Delphi 8 03.01.2009 19:57