Q&A

  • firebird, del6 시작프로그램 등록시 실행에 문제점
델6으로 일반 어플을 작성하여 사용중입니다.

DB는 FirdBird1.5를 사용하구요 여러 장비를 감시하는 프로그램이다 보니
컴퓨터가 사람이 없을때 꺼졌다 켜지더라도 플그램이 항상 시작 되어야 하거든요

문제는 시작프로그램에 등록하고 재부팅을 하면 DB연결에 실패하게 됩니다.

확인누르고 다시 실행하면 정상연결되구여...ㅠㅠ

제가 나름대로 내린 결론은 FireBird서비스 보다 어플이 먼저 올라오는게 아닌가 생각이 됩니다.
^^ 아닐지도~~~

혹시 이런 비슷한 경험해보신분 조언좀 부탁드립니다.

글구 지금 특정 서비스가 실행중인지 알수 있는방법은 없을까요!!
이건 여기저기 찾아바도 없더라구여...ㅡ.ㅡ

그럼 즐프하시고.. 건강하세요..
2  COMMENTS
  • Profile
    구창민 2005.02.18 21:11
    안녕하세요..

    아래 내용은 특정 서비스가 실행중인지 체크하는 코드입니다.

    일전에 퍼두었던 내용인데 보시고 도움이 되시길 바랍니다.

    그럼 즐거운 프로그래밍 하시구요~


    {
    - 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.


  • Profile
    김진락 2005.02.19 00:01
    ~~즐프하시고 건강하세요~~