如何以编程方式检测是否安装了MySql Connector/ODBC?(并在需要时安装)

Maw*_*awg 0 delphi

我在想这里的客户端PC.当有人来运行我的应用程序时,他们可能没有安装MySql Connector/ODBC.

现在,我可以尝试连接信息方案(或mysql)数据库(这是更好的?) - 但是,如果失败,它可能只意味着数据库服务器已关闭.我可以 ping它,但它可能已经启动并且MySql进程当前没有运行.

我想我无论如何都可以安装连接器,即使它看起来很草率,但如果这样做会显着减慢我的应用程序的启动时间.

什么是最好的方法?

当我安装时,我如何从Delphi中做到这一点,因为连接器将在d/b服务器上可用,谁知道IP地址?

或者......目前我的应用程序是一个简单的.EXE,没有安装程序.我应该创建一个也安装ODBC连接器的安装吗?(如果是这样,任何人都可以推荐一个好的免费软件安装生成器(没有广告软件或工具栏安装)?

我希望这很清楚.如果没有,请问我.

谢谢.

RRU*_*RUZ 7

要检查已安装的ODB驱动程序,您必须检查此Windows注册表项

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
Run Code Online (Sandbox Code Playgroud)

从那里你可以轻松编写delphi函数来检测是否安装了MySQL ODBC驱动程序

{$APPTYPE CONSOLE}

uses
  Windows,
  Classes,
  Registry,
  SysUtils;

function ODBC_DriverInstalled(const DriverName:string) : Boolean;
Var
  Reg      : TRegistry;
  Providers: TStrings;
  i        : Integer;
begin
  Reg:=TRegistry.Create;
  Result:=False;
  try
     Reg.RootKey:=HKEY_LOCAL_MACHINE;
     if Reg.OpenKeyReadOnly('SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers') then
     begin
        Providers:=TStringList.Create;
        try
           Reg.GetValueNames(Providers);
           for i := 0 to Providers.Count-1 do
            begin
               if CompareText(DriverName,Providers[i])=0 then
               begin
                 Result:=True;
                 Break;
               end;
            end;
        finally
           Providers.Free;
        end;
     end;
  finally
     Reg.Free;
  end;
end;



begin
  try
   Writeln(ODBC_DriverInstalled('MySQL ODBC 5.1 Driver'));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

要安装,您可以使用多个选项inno setup(可以读取Windows注册表以检查odbc驱动程序),然后安装安装文件中包含的驱动程序.您也可以使用简单的HTTP GET直接从您的应用程序下载驱动程序,并通过此处的下载地址