با سلام
من برای چک کردن کاری از سرویس استفاده میکنم و کدم رو تو تایمری که رو سرویس قرار ادم مینویسم وقتی سرویس رو اجرا میکنم بهد یه میدتی terminateمیشه برای جلوگیری از این کار چه باید بکنم؟
با تشکر
Printable View
با سلام
من برای چک کردن کاری از سرویس استفاده میکنم و کدم رو تو تایمری که رو سرویس قرار ادم مینویسم وقتی سرویس رو اجرا میکنم بهد یه میدتی terminateمیشه برای جلوگیری از این کار چه باید بکنم؟
با تشکر
سلام. ممكنه يكي از process هاي ويندوز سرويس رو متوقف كنه. اگر كدي كه براي شروع سرويس نوشتيد رو درون يك شرط بنويسيد كه در رويداد OnTimer قرار داره مشكلي پيش نمياد. در اين حالت كد اجراي سرويس فقط زماني اجرا ميشه كه سرويس متوقف شده باشه.
اگر هم به اين كد نياز داريد بگيد تا كد رو بذارم.
پيروز باشيد
سلامنقل قول:
مدخل شماره 306722748 در Delphi Knowledge Base را ببينيد.
سلام اگه لطف کنین ممنون میشمنقل قول:
noneforce جان من با این دلفی نالج بیس مشکل دارم نصبش کردم ولی نه سرچ جواب میده نه اینکه خودم مثلا بخواهم وارد بخش ado بشم و محتویاتشو ببینم همون اول هم بعد نصب بهم گفت یه اکانت باید بسازی مام ساختیم افاقه نکرد
چه کنمش؟
سلام. این کد برای راه اندازی هر سرویسی میتونه مورد استفاده قرار بگیره . در کد نمونه زیر برای سرویس MSSQLServer استفاده شده که شما میتونید به جای اون هر سرویسی رو قرار بدید:
کد:USES
WinSvc
کد:function ServiceGetStrCode(nID : integer) : string;
var
s : string;
begin
case nID of
SERVICE_STOPPED : s := 'STOPPED';
SERVICE_RUNNING : s := 'RUNNING';
SERVICE_PAUSED : s := 'PAUSED';
SERVICE_START_PENDING : s := 'START/PENDING';
SERVICE_STOP_PENDING : s := 'STOP/PENDING';
SERVICE_CONTINUE_PENDING : s := 'CONTINUE/PENDING';
SERVICE_PAUSE_PENDING : s := 'PAUSE/PENDING';
else
s := 'UNKNOWN';
end;
Result := s;
end;
function ServiceGetStatus(sMachine,
sService : string) : DWord;
var
schm : SC_Handle; //service control manager handle
schs : SC_Handle; // service handle
ss : TServiceStatus; // service status
dwStat : DWord; // current service status
begin
dwStat := 1;
schm := OpenSCManager( PChar(sMachine), Nil,
SC_MANAGER_CONNECT);
if(schm > 0)then
begin
schs := OpenService( schm, PChar(sService),
SERVICE_QUERY_STATUS);
if(schs > 0)then
begin
if (QueryServiceStatus( schs, ss)) then
begin
dwStat := ss.dwCurrentState;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := dwStat;
end;
function ServiceRunning(sMachine,
sService : string) : boolean;
begin
Result := SERVICE_RUNNING =
ServiceGetStatus(sMachine, sService);
end;
function ServiceStopped(sMachine,
sService : string) : boolean;
begin
Result := SERVICE_STOPPED =
ServiceGetStatus(sMachine, sService);
end;
function ServiceStart(sMachine,
sService : string) : boolean;
var
schm,
schs : SC_Handle;
ss : TServiceStatus;
psTemp : PChar;
dwChkP : DWord; // check point
begin
ss.dwCurrentState := 1;
schm := OpenSCManager(PChar(sMachine), nil,
SC_MANAGER_CONNECT);
if(schm > 0)then
begin
schs := OpenService(schm, PChar(sService),
SERVICE_START or SERVICE_QUERY_STATUS);
if(schs > 0)then
begin
psTemp := Nil;
if(StartService( schs, 0,psTemp))then
begin
if(QueryServiceStatus(schs, ss))then
begin
while(SERVICE_RUNNING <> ss.dwCurrentState)do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if not QueryServiceStatus(schs, ss) then
begin
break;
end;
if ss.dwCheckPoint < dwChkP then
begin
break;
end;
end;
end;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_RUNNING = ss.dwCurrentState;
end;
function ServiceStop(sMachine,
sService : string) : boolean;
var
schm,
schs : SC_Handle;
ss : TServiceStatus;
dwChkP : DWord;
begin
schm := OpenSCManager(PChar(sMachine), nil,
SC_MANAGER_CONNECT);
if schm > 0 then
begin
schs := OpenService( schm, PChar(sService),
SERVICE_STOP or SERVICE_QUERY_STATUS);
if schs > 0 then
begin
if ControlService(schs, SERVICE_CONTROL_STOP,
ss) then
begin
if(QueryServiceStatus(schs, ss))then
begin
while(SERVICE_STOPPED <> ss.dwCurrentState)do
begin
dwChkP := ss.dwCheckPoint;
if(not QueryServiceStatus(schs,ss))then
begin
break;
end;
if(ss.dwCheckPoint <
dwChkP)then
begin
break;
end;
end;
end;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_STOPPED = ss.dwCurrentState;
end;
استفاده:
منبع: یادم نیست!کد:
ServiceStart('','MSSQLServer');
سلام
farhad_g1 عزيز كد شما ربطي به موضوع تاپيك نداره!
سلامنقل قول:
دوباره نصب كنيد، تاحالا كسي مشكلي باهاش نداشته.
؟نقل قول:
farhad_g1 عزيز كد شما ربطي به موضوع تاپيك نداره!
خب موضوع اصلی تاپیک راه اندازی سرویس هست نه Delphi Knowledge Base
کد زیر رو داخل تایمر بنویسید. دقیقا راه حل مشکل هست:نقل قول:
من برای چک کردن کاری از سرویس استفاده میکنم و کدم رو تو تایمری که رو سرویس قرار ادم مینویسم وقتی سرویس رو اجرا میکنم بهد یه میدتی terminateمیشه برای جلوگیری از این کار چه باید بکنم؟
کد:if ServiceRunning('','MSSQLServer')=false then
begin
ServiceStart('','MSSQLServer');
ShowMessage('سرویس با موفقیت راه اندازی شد');
end;