Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

Сервис и Win2000   Найти похожие ветки 

 
kalishenko   (2003-09-30 18:30) [0]

Как написать свой сервис в Windows 2000? Зарегестрировать свое приложение в сервисах удалось, но запустить не получилось, т.к. сервисы запускаются и работают по-особенному. Так вот нет ли у кого примера написания сервиса?


 
pasha   (2003-10-01 02:20) [1]

Вот тебе пример елементарного сервиса:
//Сигнал через определённое время


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls;

type
TService1 = class(TService)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
Service1: TService1;

implementation

{$R *.DFM}

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

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

procedure TService1.Timer1Timer(Sender: TObject);
begin
SysUtils.Beep;
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Timer1.Enabled := true;
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Timer1.Enabled := false;
end;

procedure TService1.ServicePause(Sender: TService; var Paused: Boolean);
begin
Timer1.Enabled := false;
end;

procedure TService1.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Timer1.Enabled := true;
end;

procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do
ServiceThread.ProcessRequests(true);
end;

end.



 
pasha   (2003-10-01 02:29) [2]

Зарегистрировать сервис в системе нужно так:
Project1.exe /install, где Project1.exe твой скомпилированый проект.
Удалить сервис из системе нужно так:
Project1.exe /uninstall
Запуск сервиса происходит в "Администрирование\Сервисы" находишь в списке имя своего сервиса(свойство DisplayName класса TServise) и запускаеш его
Сервисы НЕ ПОДДЕРЖИВАЮТСЯ В WIN9X


 
kalishenko   (2003-10-01 18:41) [3]

Че-то никакого сигнала нет, хотя сервис вроде запускается. Вместо beep пробовал выдавать какое-нибудь сообщение

MessageBox(FindWindow(nil,"Delphi 6 - Project1"),"Это тест моей службы","From My Service",0);

но в ответ тишина...


 
pasha   (2003-10-01 22:50) [4]

1.Как ты проверяш что сервис запустился?
2.Какая у тебя операционка?


 
Digitman   (2003-10-02 08:51) [5]

MessageBox(0,"Это тест моей службы","From My Service", mb_ok);


 
younghacker   (2003-10-02 09:45) [6]

Ребята не балуйтесь с FindWindow!

В терминальном сервере это ни к чему не приводит.
Все ищется только в пределах одной сессии.

Тоесть сессии изолированы от процессов даже на уровне
мутексов и файл мапинга. И из интерактивной сессии - невозможно при помощи FindWindow найти окно процесса.

Такое чувство что на разных компах работает все.

Удачи!


 
kavboy   (2003-10-02 11:01) [7]

А в свойствах службы на закладке "Вход в систему" поставил птичку "Разрешить взаимодействие с рабочим столом"?


 
kalishenko   (2003-10-02 14:24) [8]

>>pasha
>>1.Как ты проверяш что сервис запустился?

Так как после запуска сервиса из служб ошибка не вылетает, то, по-идее, все нормально.

>>2.Какая у тебя операционка?

XP и Win2000 Server.

>>kavboy

>>А в свойствах службы на закладке "Вход в систему" поставил птичку "Разрешить взаимодействие с рабочим столом"?

А что эта птичка означает и на что она влияет?


 
kalishenko   (2003-10-02 14:44) [9]

Все заработало, как только я поставил ту самую птичку в "Разрешить взаимодействие с рабочим столом". И все-таки, что она означает понять до конца не могу. То ли это взаимодействие с графическим интерфейсом винды, то ли просто означает, что эта служба будет скрытой от глаз...


 
Гость из далека   (2003-10-02 14:49) [10]


> pasha © (01.10.03 02:29) [2]
> Зарегистрировать сервис в системе нужно так:
> Project1.exe /install, где Project1.exe твой скомпилированый
> проект.
> Удалить сервис из системе нужно так:
> Project1.exe /uninstall
> Запуск сервиса происходит в "Администрирование\Сервисы"
> находишь в списке имя своего сервиса(свойство DisplayName
> класса TServise) и запускаеш его
> Сервисы НЕ ПОДДЕРЖИВАЮТСЯ В WIN9X

Что то у меня в XP сервис не появляется :-(, куда копать?


 
vadfe   (2003-10-02 17:58) [11]

А почему если из сервиса запустить exe-шник до входа в систему,
после входа окна ехе-шника не видно и убть его ничем не получается?


 
pasha   (2003-10-02 23:44) [12]


> Гость из далека


> Что то у меня в XP сервис не появляется :-(, куда копать?

Попробуй нажать F5 в окне сервисов


 
pasha   (2003-10-02 23:47) [13]


> vadfe ©



> А почему если из сервиса запустить exe-шник до входа в систему,
> после входа окна ехе-шника не видно и убть его ничем не
> получается?

Не понял напиши по номальному


 
Гость из далека   (2003-10-03 10:32) [14]


> pasha © (02.10.03 23:44) [12]
>
> > Гость из далека
>
>
> > Что то у меня в XP сервис не появляется :-(, куда копать?
>
> Попробуй нажать F5 в окне сервисов

И F5 и перезагрузка ничего не помогает :-(


 
vadfe   (2003-10-03 10:58) [15]

>pasha
Пишем сервис:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
WinExec("C:\MyProgram.exe",SW_SHOW);
end;
//************
Запускаем сервис из консоли "Службы"
MyProgram.exe нормально запускается т.е. открыта форма, висит иконка в трее и т.д.
Перезагружаемся
Сервис стартует автоматически до загрузки рабочего стола.
После загрузки рабочего стола ни формы не видно, ни иконки в трее.
MyProgram.exe видна в taskmgr но остановить ее не получается.


 
pasha   (2003-10-04 01:41) [16]


> vadfe

Установи соответствующие свойства в такие значения
1. Interactive = True
2. ServiceType = stWin32
3. StartType = stAuto


 
pasha   (2003-10-04 01:45) [17]


> Гость из далека

Имя сервиса который ты создаеш задаётся в свойстве DisplayName. С таким именем он и появляется в окне сервисов. У меня тоже стоит WinXP и все мои сервисы видны.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-36659
K.L.
2003-11-30 18:09
2003.12.12
Проблема со SpeedButton ом


14-36834
RealRascal
2003-11-16 11:38
2003.12.12
---<<< Скорость кода >>>---


14-36805
kaif
2003-11-19 22:54
2003.12.12
Метаморфозы


1-36640
Viper-Omsk
2003-11-22 17:51
2003.12.12
Перемещение файла


3-36529
Alex-kosmonavt
2003-11-21 12:50
2003.12.12
Отображение запроса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский