Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySql Service mit Delphi Code starten (https://www.delphipraxis.net/55693-mysql-service-mit-delphi-code-starten.html)

jana 25. Okt 2005 16:06

Datenbank: MySql • Version: 4.1 • Zugriff über: MyDAC

MySql Service mit Delphi Code starten
 
Hallo ich möchte gern meinen MySQL Dienst aus meinem Code raus starten. Wie soll ich das machen
Das hier habe ich schon ausprobiert, aber das klappt irgendwie nicht:

Delphi-Quellcode:
if ShellExecute(0, nil, 'C:\mysql\bin\mysqld-nt.exe', nil, nil, 9)< 33 then showmessage('Anwendung kann nicht geoeffnet werden ');
hat noch jemand nen tip?

Gruß Jana

Flocke 25. Okt 2005 16:29

Re: MySql Service mit Delphi Code starten
 
Wenn MySQL als Dienst installiert ist, dann kannst du EXE-Datei nicht einfach starten. Statt dessen brauchst du die Befehle MSDN-Library durchsuchenOpenSCManager, MSDN-Library durchsuchenOpenService, MSDN-Library durchsuchenControlServer und MSDN-Library durchsuchenCloseServiceHandle.

Ein Beispiel gibts von Microsoft hier.

Wenn du wirklich einfach nur die EXE starten willst, dann musst du (glaube ich) noch den Parameter "--standalone" angeben. Ich hab's mal so gelöst:

Delphi-Quellcode:
function RunThis(command, path: string): THandle;
var si: TStartupInfo;
    pi: TProcessInformation;
begin
  FillChar(si, SizeOf(si), 0);
  si.cb := SizeOf(si);

  FillChar(pi, SizeOf(pi), 0);

  GetStartupInfo(si);
  si.wShowWindow := SW_HIDE;
  si.dwFlags := si.dwFlags or STARTF_USESHOWWINDOW;
  si.dwFlags := si.dwFlags and not (STARTF_USEPOSITION
                                    or STARTF_USESIZE
                                    or STARTF_USECOUNTCHARS
                                    or STARTF_USEFILLATTRIBUTE);

  if not CreateProcess(nil, PChar(command), nil, nil, TRUE,
                       NORMAL_PRIORITY_CLASS, nil, PChar(path), si, pi) then begin
    Result := 0;
  end else begin
    CloseHandle(pi.hThread);
    Result := pi.hProcess;
  end;
end;

function CheckProcess(var hp: THandle): Boolean;
var exc: Cardinal;
begin
  Result := False;
  if hp <> 0 then begin
    exc := STILL_ACTIVE;
    if GetExitCodeProcess(hp, exc) then
      if exc <> STILL_ACTIVE then begin
        CloseHandle(hp);
        hp := 0;
        Result := True;
      end;
  end;
end;

procedure TfrmMain.DbServer_Start;
var pth, cmd: string;
begin
  CheckProcess(DbServer_Handle);
  if DbServer_Handle <> 0 then exit;

  try
    Screen.Cursor := crHourglass;

    pth := BasePath + 'mysql\bin';
    cmd := pth + '\mysqld-nt.exe --defaults-file=my.cnf --standalone';

    DbServer_Handle := RunThis(cmd, pth);
    if DbServer_Handle = 0 then
      raise Exception.Create('Fehler beim Starten des Datenbankservers!');
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TfrmMain.DbServer_Stop;
var pth, cmd: string;
    hdl: THandle;
    cnt: Integer;
begin
  CheckProcess(DbServer_Handle);
  if DbServer_Handle = 0 then exit;

  try
    Screen.Cursor := crHourglass;

    pth := BasePath + 'mysql\bin';
    cmd := pth + '\mysqladmin.exe --defaults-file=my.cnf --user=root --password=root shutdown';

    hdl := RunThis(cmd, pth);
    if hdl <> 0
      then CloseHandle(hdl)
      else raise Exception.Create('Fehler beim Anhalten des Datenbankservers!');

    cnt := 50;
    repeat
      dec(cnt);
      CheckProcess(DbServer_Handle);
      if DbServer_Handle <> 0 then
        Sleep(100);
    until (cnt < 1) or (DbServer_Handle = 0);
  finally
    Screen.Cursor := crDefault;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz