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

Вниз

Не инсталлируется сервис по /install   Найти похожие ветки 

 
h0use   (2003-10-28 17:05) [0]

Имеем вот такой юнит:

unit Service;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, SvcMgr, DB, ADODB, JvLogFile,
Registry, SyncObjs, Dialogs;

type
TSimpleClient = class(TObject)
DNS,Name : String;
Permission : Byte;
ListLink : Integer;
Thread : Pointer;
end;

TBAService = class(TService)
BADBCon: TADOConnection;
. . .
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceExecute(Sender: TService);
function ServerStart:boolean;
function ServerStop:boolean;
function BaseStart:boolean;
function BaseStop:boolean;
procedure LoadDefaults;
function LoadFromReg:boolean;
function SaveToReg:boolean;
procedure ServiceAfterInstall(Sender: TService);
. . .
private
Stream:TMemoryStream;
{ Private declarations }
public
flServerStat : Boolean;
flBaseStat : Boolean;
flViewLaunch : Boolean;
flHasChanges : Boolean;
flUserConnected : Boolean;
LogFileName : String;
BDFileName : String;
ServerIP : String;
ServerName : String;
ServerPort : String;
flByName : Boolean;
flAutostart : Boolean;
flAutoSelectLast: Boolean;
flLogNet : Boolean;
CS : TCriticalSection;
. . .
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
BAService: TBAService;
isBaseStarted : Boolean;
implementation
Uses SrvMain;

{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
BAService.Controller(CtrlCode);
end;

function TBAService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
. . .
procedure TBAService.ServiceStart(Sender: TService; var Started: Boolean);
begin
flServerStat := False;
flBaseStat := False;
flViewLaunch := False;
flHasChanges := False;
flUserConnected := False;
flByName := True;
flAutostart := False;
flAutoSelectLast:= True;
flLogNet :=True;
if not assigned (CS) then CS := TCriticalSection.Create;
StartLogging;
If not LoadFromReg then LoadDefaults;
If ServerStart and BaseStart then SaveLog(1, "+ Successefully started.")
else SaveLog(1, "- Started with any errors.");
Started := True;
end;

procedure TBAService.ServiceStop(Sender: TService; var Stopped: Boolean);
var
f1,f2:Boolean;
begin
f1:=True;f2:=True;
if flBaseStat then f2:=BaseStop;
if flServerStat then f1:=ServerStop;
If f1 and f2 then SaveLog(1, "+ Successefully stopped.")
else SaveLog(1, "- Stopped with any errors.");
StopLogging;
if assigned(CS) then FreeAndNil(CS);
ServiceThread.Terminate;
Stopped := True;
end;

procedure TBAService.ServiceContinue(Sender: TService;
var Continued: Boolean);
var
f1,f2:Boolean;
begin
f1:=True;f2:=True;
if not flServerStat then f1:=ServerStart;
if not flBaseStat then f2:=BaseStart;
If f1 and f2 then SaveLog(1, "+ Successefully restarted.")
else SaveLog(1, "- Restarted with any errors.")
end;

procedure TBAService.ServicePause(Sender: TService; var Paused: Boolean);
var
f1:Boolean;
begin
f1:=True;
if flServerStat then f1:=ServerStop;
If f1 then SaveLog(1, "+ Successefully paused.")
else SaveLog(1, "- Paused with any errors.");
Paused:=True;
end;

procedure TBAService.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
if RegisterWindowMessage("TaskbarCreated")<>0 then
begin
Application.CreateForm(TfmSrvMain, fmSrvMain);
fmSrvMain.ShowModal;
end;
end;
end;
. . .

procedure TBAService.ServiceAfterInstall(Sender: TService);
begin
ShowMessage("Service installed");
end;

end.

И есть сама прога

program Server;

uses
Forms,
SrvView in "SrvView.pas" {Visual administartion form for server},
// SrvMain in "SrvMain.pas" {Main form (not visual) for hidden server operations},
Service in "Service.pas" {Build in service provider};

{$R *.res}

begin
Application.Initialize;
Application.Title := " Name ";
Application.CreateForm(TBAService, BAService);
Application.Run;
end.

При запуске server.exe /install не присходит совершенно ничего. Т.е. сервис не появляется в списке сервисов системы. В чем грабли?

PS Звпускалось с правами администратора


 
Reindeer Moss Eater   (2003-10-28 17:31) [1]

Убери ShowMessage


 
h0use   (2003-10-28 17:43) [2]

ShowMessage - это я для отладки написал. Без него тоже не работает. До него даже не доходит. И в системных евентах вообще никакх записей, как-будто программа вообще не запускается.


 
Digitman   (2003-10-28 17:58) [3]


> ShowMessage - это я для отладки написал


для отладки в событиях TBAServiceCreate и TBAServiceDestroy создавай/уничтожай свою форму и посылай ее окну нужные сообщения, если метода LogMessage() недостаточно

либо убери везде ShowMessage() и используй при крайней необходимости MessageBox()


 
h0use   (2003-10-28 18:08) [4]

Убрал я все ShowMessage только толку ноль, все равно не инсталлится.


 
Digitman   (2003-10-29 11:34) [5]


> h0use


так, милый мой, приложение Server.exe-то твое д.б. быть создано не как обычное приложение, а именно как приложение-сервис !

см. File -> New -> ServiceApplication


 
h0use   (2003-10-30 10:24) [6]

Спасибо за совет, я уже сам догадался :) Но вообще это свинство со стороны Борланда, почему они не обрабатывают добавление в проект сервисного юнита :(


 
Digitman   (2003-10-30 10:46) [7]


> Но вообще это свинство со стороны Борланда, почему они не
> обрабатывают добавление в проект сервисного юнита


глупости)

с какой стати Борланд должен что-то "обрабатывать", если он знать ничего не знает о логическом содержимом "юнита" ? И какое это имеет отношение к инсталляции сервисного приложения ? Ведь механизм инсталляции фигурирует в модуле SvcMgr, где реализован класс TServiceApplication, который, собственно, и обрабатывает ключи /INSTALL , /UNINSTALL) ... а обработать он их сможет лишь в том случае, если в списке Components[] созданного объекта TServiceApplication фигурирует хотя бы один объект-наследник TService



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

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

Наверх





Память: 0.47 MB
Время: 0.009 c
14-37937
}|{yk
2003-12-19 18:45
2004.01.13
Помогите выбрать мобильный!


1-37778
Тимохов
2003-12-29 15:47
2004.01.13
Обмен опытом работы с MDI


1-37682
Кен
2003-12-25 02:34
2004.01.13
Как правильно проводить лексический анализ текста ? Разбиение


3-37566
List
2003-12-12 00:01
2004.01.13
Data Module


3-37558
Yad
2003-12-15 14:51
2004.01.13
TDbf. Не работает фильтрация по дате.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский