Delphi: как проверить, установлен ли MySQL на машине Windows?

Я разрабатываю программу установки для своей программы для ОС Windows.

Я хочу, чтобы установщик установил, что MySQL уже установлен, и если он не устанавливает MySQL MySQL до завершения установки.

Как я могу проверить, есть ли MySQL на компьютере с delphi?

Ответ 1

Проверьте эту запись в реестре для MySQL, если она есть HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB
Если у вас установлен MySQL, эта запись должна присутствовать.

Если вам нужно что-то еще, проверьте службу, если ее настоящее

    function ServiceIsPresent(sMachine, sService: PChar): Boolean;
    var
      SCManHandle, SvcHandle: SC_Handle;
    begin
      // 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   
            Result := True;
            CloseServiceHandle(SvcHandle);
          end;
        else
            Result := False; 
        CloseServiceHandle(SCManHandle);
      end;
    end;

вызов функции

  ServiceGetStatus(nil,'MySQL');

Я получил это имя службы из своих записей в реестре
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Но будьте осторожны при использовании проверки сервиса, потому что у некоторых людей могут быть разные имена служб для службы MySQL.
Как и в моем случае, у меня есть 2 установки MySQL, поэтому есть 2 службы MySQL, MySQL501.
Следовательно, будет немного утомительно узнать правильное имя службы.

Ответ 2

Что касается сервера MySQL:

  • Как @Shirish11 sayd, вы можете проверить HKLM\SOFTWARE\MySQL AB. Но это ничего не гарантирует, так как этот раздел реестра необязателен. MySQL действительно не требует никакой "сложной" процедуры установки, такой как SQL Server. Вы можете загрузить MySQL как инсталлятор, как только ZIP-архив. В последнем случае ключ реестра не будет создан. Аналогичные услуги. Используя командную строку mysqld.exe --install Kitty --defaults-file=c:\mysql.cfg, вы можете создать сервис MySQL с именем Kitty. Или даже служба может вообще не создаваться.
  • Сервер MySQL может быть установлен не локально, а на другом хосте. И администрируется специальным администратором баз данных. Таким образом, вам может не понадобиться вообще проверять/устанавливать сервер. Просто не ваша задача. Если ваше приложение собирается установить локальный сервер, который будет использоваться только рабочей станцией "this", затем используйте MySQL Embedded.
  • В общем, вы должны спросить пользователя об установке MySQL, например: "У вас установлен сервер MySQL?". И если пользователь отвечает "да", вы можете задать ему параметры входа (хост, порт, база данных, имя пользователя, пароль). Если нет, вы можете предложить ему загрузить его и установить, чтобы избежать проблем с лицензированием. Поскольку у вас должна быть лицензия, приобретенная у Oracle, для распространения установщика MySQL Server с вашим программным обеспечением.

Что касается клиента MySQL:

  • Других признаков нет, что libmysql.dll "установлен", чем libmysql.dll. Вы можете проверить libmysql.dll в папке Windows в папках PATH. Более простой - вы всегда можете поместить его в свой EXE.
  • Если вы используете dbExpress, вам следует использовать определенную версию libmysql.dll, поддерживаемую драйвером EMBT dbExpress. Так что, опять же, лучше разместить его с EXE.
  • См. примечание (3) относительно лицензирования сервера. Это относится и к клиенту.

Ответ 3

Помните, что HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB может оставаться в реестре даже при удалении MySQL. То, что удаляется, HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB\MySQL Server 5.1, но поскольку мы не знаем часть MySQL Server 5.1 заранее, вам нелегко это сделать. Кроме того, MySQL не нужно устанавливать как таковой.

Можно проверить HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MySQL\ImagePath, а затем посмотреть, существует ли путь, указанный значением. Вторая часть важна, потому что MySQL не должен удалять служебный ключ во время удаления, если служба уже отключена. Таким образом, это значение реестра может оставаться даже после удаления. Таким образом, лучший вариант - получить путь к исполняемому файлу из вышеупомянутого реестра, а затем посмотреть, существует ли mysqld.exe или (что бы это ни было). MySQL не установлен, если значение реестра не существует или файл не существует. Улов здесь заключается в том, что эта логика терпит неудачу, если MySQL установлен, но не настроен для запуска его службы (это означает, что нет ключа HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MySQL). Но это тривиально, так как запуск установок MySQL будет в любом случае иметь его, и большинство машин будет работать MySQL. Теперь, даже если установленный MySQL не настроен на наличие службы, вполне нормально установить другую версию вашего MySQL и сначала зарегистрировать свой сервис.

Я не уверен в идеальном решении, потому что MySQL не является проприетарным программным обеспечением. Я имею в виду, что любой может объединить MySQL и установить в своих собственных вкусах. Например, wampserver поставляется со своим собственным MySQL. У клиентских машин, безусловно, не будет установленных серверов таким образом, но мы не можем исключить эту опцию, и нам может не понадобиться другой экземпляр MySQL (обратите внимание, что отдельный экземпляр MySQL отлично работает с MySQL на сервере wamp). То, что я делаю, это проверить выше, если я не нашел, я проверяю путь изображения для службы wamp, например HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\wampmysqld\ImagePath. Это зависит от сервера, который у вас есть на машине.