我正在为我的Windows OS程序开发一个安装程序.
我希望安装程序检查MySQL是否已经安装,以及在安装结束之前是否默认安装MySQL.
如何检查MySQL是否已经在使用delphi的计算机上?
关于MySQL服务器:
HKLM\SOFTWARE\MySQL AB
.但这并不保证任何内容,因为此注册表项是可选的.MySQL确实不需要任何"复杂"的安装过程,比如SQL Server.您可以将MySQL作为安装程序下载,就像ZIP存档一样.在最后一种情况下,将不会创建注册表项.与服务类似.使用mysqld.exe --install Kitty --defaults-file=c:\mysql.cfg
命令行,您可以使用Kitty名称创建MySQL服务.甚至可能根本不创建服务.关于MySQL客户端:
libmysql.dll
"安装",而不是libmysql.dll
存在.您可以libmysql.dll
在Windows文件夹中检查文件PATH
夹.更简单 - 您可以随身携带EXE.libmysql.dll
EMBT dbExpress驱动程序支持的特定版本.所以,再次,最好把它与你的EXE.如果存在,请检查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.
因此找出正确的服务名称会有点乏味.