Delphi:如何检查Windows机器上是否安装了MySQL

Sim*_*onM 12 mysql delphi

我正在为我的Windows OS程序开发一个安装程序.

我希望安装程序检查MySQL是否已经安装,以及在安装结束之前是否默认安装MySQL.

如何检查MySQL是否已经在使用delphi的计算机上?

da-*_*oft 7

关于MySQL服务器:

  1. 正如@ Shirish11所说,你可以检查一下HKLM\SOFTWARE\MySQL AB.但这并不保证任何内容,因为此注册表项是可选的.MySQL确实不需要任何"复杂"的安装过程,比如SQL Server.您可以将MySQL作为安装程序下载,就像ZIP存档一样.在最后一种情况下,将不会创建注册表项.与服务类似.使用mysqld.exe --install Kitty --defaults-file=c:\mysql.cfg命令行,您可以使用Kitty名称创建MySQL服务.甚至可能根本不创建服务.
  2. MySQL服务器可能不是本地安装,而是安装在不同的主机上.并由专门的DBA管理.因此,您可能根本不需要检查/安装服务器.不是你的任务.如果您的应用程序要安装仅由"this"工作站使用的本地服务器,则使用MySQL Embedded.
  3. 通常,您应该询问用户有关MySQL安装的信息,例如"您是否安装了MySQL服务器?".如果用户回答"是",那么您可以询问他的登录参数(主机,端口,数据库,用户名,密码).如果没有,那么你可以建议他下载并安装,以避免许可问题.因为您必须拥有从Oracle购买的许可证,才能使用您的软件分发MySQL Server安装程序.

关于MySQL客户端:

  1. 没有其他迹象,即libmysql.dll"安装",而不是libmysql.dll存在.您可以libmysql.dll在Windows文件夹中检查文件PATH夹.更简单 - 您可以随身携带EXE.
  2. 如果您使用的是dbExpress,那么您应该使用libmysql.dllEMBT dbExpress驱动程序支持的特定版本.所以,再次,最好把它与你的EXE.
  3. 请参阅有关服务器许可的注释(3).它也适用于客户.


Shi*_*h11 5

如果存在,请检查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;
Run Code Online (Sandbox Code Playgroud)

功能调用

  ServiceGetStatus(nil,'MySQL');
Run Code Online (Sandbox Code Playgroud)

我从我的注册表项中选择了这个服务名称
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
但是在使用服务检查时要小心,因为有些人可能有不同的服务名称用于MySQL服务.
在我的情况下,我有2个MySQL安装,因此2个服务存在MySQL,MySQL501.
因此找出正确的服务名称会有点乏味.