Q&A

  • mysql자동실행..
프로그램 실행시에 mysql을 자동으로 실행 시키려구 합니다..



procedure TForm1.FormCreate(Sender: TObject);

begin

ShellExecute(handle,'open','c:mysqlbinmysqld --safe-mode',nil,nil, SW_SHOW);

end;



그래서 이렇게 만들어 봤는데요.. 컴파일시에 에러는 없는데.. 쩝~~ mysql이 실행이 안되더군요..

방법이 틀린것인지?? 도움 부탁드립니다..

참 그리고 프로그램 종료시에는 mysql도 종료 하려구 합니다...

이런방법으로 하면 되는지요??



2  COMMENTS
  • Profile
    parkisu 2001.10.25 20:21
    점시기 wrote:

    > 프로그램 실행시에 mysql을 자동으로 실행 시키려구 합니다..

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > ShellExecute(handle,'open','c:mysqlbinmysqld --safe-mode',nil,nil, SW_SHOW);

    > end;

    >

    > 그래서 이렇게 만들어 봤는데요.. 컴파일시에 에러는 없는데.. 쩝~~ mysql이 실행이 안되더군요..

    > 방법이 틀린것인지?? 도움 부탁드립니다..

    > 참 그리고 프로그램 종료시에는 mysql도 종료 하려구 합니다...

    > 이런방법으로 하면 되는지요??

    >

    안녕하세요?

    저두 mysql을 사용하구 있습니다.

    팁모아에 dos프로그램을 실행시키는 함수가 있더군요.



    function ProcessExecute(CommandLine: String; cShow: Word): Integer;

    var

    Rslt: LongBool;

    StartUpInfo: TStartUpInfo;

    ProcessInfo: TProcessInformation;

    begin { Delphi 4 developer's guide page 552 - 553 }

    FillChar(StartUpInfo, SizeOf(TStartupInfo), 0);

    with StartUpInfo do begin

    cb:= SizeOf(TStartUpInfo);

    dwFlags:= STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;

    wShowWindow:= cShow;

    end;

    Rslt:= CreateProcess(nil, PChar(CommandLine), nil, nil, False,

    NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);

    if Rslt

    then with ProcessInfo do begin

    WaitForInputIdle(hProcess, INFINITE);

    CloseHandle(hThread); CloseHandle(hProcess); Result:= 0;

    end else

    Result:= GetLastError;

    end;



    {mysqld실행}

    procedure TForm1.ExecuteMysqld;

    var

    ErrorCode: integer;

    begin

    ErrorCode:= ProcessExecute('c:mysqlbinmysqld.exe --safe-mode', Sw_Show);

    //sw_show대신 0을 주면 도스창이 보이지 않고 실행됩니다.

    if ErrorCode<> 0

    then

    ShowMessage('프로그램 실행중 에러발생. 에러번호: ' +IntToStr(Errorcode));

    end;





    {mysqld종료}



    uses

    TlHelp32, Registry, FileCtrl;



    var

    MysqlPath: string;

    ProcID: integer;



    {mysql이 설치된 경로를 가져오는 함수}

    function GetMysqlPath: string;

    var

    Reg: TRegistry;

    begin

    Result:= '';

    Reg:= TRegistry.Create;

    try

    Reg.RootKey:= HKEY_LOCAL_MACHINE;

    if Reg.OpenKey

    ('SoftwareMicrosoftWindowsCurrentVersionAppPathsmysqld.Exe, False) then

    Result:= Lowercase(Reg.ReadString('Path'));

    finally

    Reg.CloseKey;

    Reg.Free;

    end;

    end;



    {mysql이 실행되어 있는지 체크}

    function TForm1.CheckDemon:Boolean;

    var

    Process32: TProcessEntry32;

    phandle : THandle; // the handle of the Windows object

    Next : Boolean;

    Mysqld : string;

    begin

    Mysqld:= Lowercase(GetMysqlPath+'binmysqld.exe');

    Result:= False;



    if not FileExists(Mysqld) then Exit;



    Process32.dwSize := SizeOf(TProcessEntry32);

    phandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    try

    if Process32First(phandle, Process32) then

    begin

    Next:= True;

    repeat

    Next := Process32Next(phandle, Process32);

    if Next then

    begin

    if Mysqld= Lowercase(Process32.szExeFile) then

    begin

    ProcID:= Process32.th32ProcessID; //프로세스의 ID를 변수에 기록

    Result:= True;

    Break;

    end;

    end;

    until Next=False;

    end;

    finally

    CloseHandle(phandle); // closes an open object handle

    end;

    end;





    {mysqld종료}

    procedure TForm1.KillMysqd;

    var

    hProcess: THandle;

    begin

    while CheckDemon do begin

    hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcID);

    if hProcess = NULL then

    begin

    //

    end;



    // 명시한 process를 강제 종료시킨다

    TerminateProcess(hProcess, 0);

    end;

    end;





    도움이 되시길.

  • Profile
    점시기 2001.10.25 21:00
    너무 정확하게 답변을 주셨네요..

    제가 모르고 있는 부분들에 대한 답변 너무 감사드립니다.

    많은 도움이 되었습니다.



    그리고 님의 답변으로 한단계 업된 프로그램을 만들어 볼수 있을것 같은 느낌이 드네요..

    너무 감사 드립니다..