프로그램 실행시에 mysql을 자동으로 실행 시키려구 합니다..
procedure TForm1.FormCreate(Sender: TObject);
begin
ShellExecute(handle,'open','c:mysqlbinmysqld --safe-mode',nil,nil, SW_SHOW);
end;
그래서 이렇게 만들어 봤는데요.. 컴파일시에 에러는 없는데.. 쩝~~ mysql이 실행이 안되더군요..
방법이 틀린것인지?? 도움 부탁드립니다..
참 그리고 프로그램 종료시에는 mysql도 종료 하려구 합니다...
이런방법으로 하면 되는지요??
> 프로그램 실행시에 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;
도움이 되시길.