델6으로 일반 어플을 작성하여 사용중입니다.
DB는 FirdBird1.5를 사용하구요 여러 장비를 감시하는 프로그램이다 보니
컴퓨터가 사람이 없을때 꺼졌다 켜지더라도 플그램이 항상 시작 되어야 하거든요
문제는 시작프로그램에 등록하고 재부팅을 하면 DB연결에 실패하게 됩니다.
확인누르고 다시 실행하면 정상연결되구여...ㅠㅠ
제가 나름대로 내린 결론은 FireBird서비스 보다 어플이 먼저 올라오는게 아닌가 생각이 됩니다.
^^ 아닐지도~~~
혹시 이런 비슷한 경험해보신분 조언좀 부탁드립니다.
글구 지금 특정 서비스가 실행중인지 알수 있는방법은 없을까요!!
이건 여기저기 찾아바도 없더라구여...ㅡ.ㅡ
그럼 즐프하시고.. 건강하세요..
아래 내용은 특정 서비스가 실행중인지 체크하는 코드입니다.
일전에 퍼두었던 내용인데 보시고 도움이 되시길 바랍니다.
그럼 즐거운 프로그래밍 하시구요~
{
- Torry에서 퍼왔습니다. -
서버의 특정 서비스가 실행되는지 여부를 체크할 수 있습니다.
현재 이 프로그램에서는 MS SQL SERVER가 정상적으로 시작 되었는지를 체크 합니다.
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, WinSvc,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Timer1: TTimer;
Panel1: TPanel;
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
{******************************************}
{*** Parameters: ***}
{*** sService: specifies the name of the service to open
{*** sMachine: specifies the name of the target computer
{*** ***}
{*** Return Values: ***}
{*** -1 = Error opening service ***}
{*** 1 = SERVICE_STOPPED ***}
{*** 2 = SERVICE_START_PENDING ***}
{*** 3 = SERVICE_STOP_PENDING ***}
{*** 4 = SERVICE_RUNNING ***}
{*** 5 = SERVICE_CONTINUE_PENDING ***}
{*** 6 = SERVICE_PAUSE_PENDING ***}
{*** 7 = SERVICE_PAUSED ***}
{******************************************}
var
SCManHandle, SvcHandle: SC_Handle;
SS: TServiceStatus;
dwStat: DWORD;
begin
dwStat := 0;
// Open service manager handle.
SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);
if (SCManHandle > 0) then begin
SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS);
// if Service installed
if (SvcHandle > 0) then begin
// SS structure holds the service status (TServiceStatus);
if (QueryServiceStatus(SvcHandle, SS)) then
dwStat := ss.dwCurrentState;
CloseServiceHandle(SvcHandle);
end;
CloseServiceHandle(SCManHandle);
end;
Result := dwStat;
end;
function ServiceRunning(sMachine, sService: PChar): Boolean;
begin
Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);
end;
// Check if Eventlog Service is running
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ServiceRunning(nil, 'MSSQLSERVER') then
Memo1.Lines.Insert(0,'Running')
else
Memo1.Lines.Insert(0,'Not Running');
Panel1.Caption := ' Memo Lines : '+FormatFloat(',0',Memo1.Lines.Count);
end;
{
Windows 2000 and earlier: All processes are granted the SC_MANAGER_CONNECT,
SC_MANAGER_ENUMERATE_SERVICE, and SC_MANAGER_QUERY_LOCK_STATUS access rights.
Windows XP: Only authenticated users are granted the SC_MANAGER_CONNECT,
SC_MANAGER_ENUMERATE_SERVICE,
and SC_MANAGER_QUERY_LOCK_STATUS access rights.
}
{
Do not use the service display name (as displayed in the services
control panel applet.) You must use the real service name, as
referenced in the registry under
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
}
procedure TForm1.FormShow(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
end.