如何用DELPHI编程读取MYSQL的安装路径
比方说
MYSQL4.0 路径是:
C:\Program Files\MySQL\MySQL AB\MySQL Server 4.1\bin
MYSQL5.0 路径是:
C:\Program Files\MySQL\MySQL Server 5.0\bin当然还有一种不“确定”的情况
就是用户在安装MYSQL安装时“自定义”的路径
比方说
MYSQL4.0 路径是:
C:\Program Files\MySQL\MySQL AB\MySQL Server 4.1\bin
MYSQL5.0 路径是:
C:\Program Files\MySQL\MySQL Server 5.0\bin当然还有一种不“确定”的情况
就是用户在安装MYSQL安装时“自定义”的路径
或者用户在安装MYSQL自定义了路径时,如何获取这个MYSQL的路径
就是这个Bin的所在位置呀
如果是一个绿色软件 就真的放哪里都不知道了.开个多线程 土办法慢慢找文件名吧MYSQL 应该有执行, 可以通过进程快照取他的文件路径
-------------------------------
这方法也太土了吧?还不如获取进程列表,然后看进程mysqld-nt.exe的位置。
这是个方法,用DELPHI编程如何获取进程表,
并再获取进程mysqld-nt.exe的所在位置呀???
2、也可以使用WinSvc的OpenSCManager、EnumServicesStatus等来枚举系统服务列表。转载枚举NT系统服务
并获取这个mysqld-nt.exe所在文件夹呀,还请赐教
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TLHelp32, PsApi;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function GetProcessPath(ProcessID: DWORD): string;
var
mHandle: THandle;
ModName: Array[0..Max_Path-1] of Char;
hMod: HModule;
n: DWORD;
begin
Result:=''; mHandle:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False,
ProcessID);
if mHandle>0 then
try
//uses PsAPI
ENumProcessModules(mHandle,@hMod,Sizeof(hMod),n);
if GetModuleFileNameEx(mHandle,hMod,ModName,Sizeof(ModName))>0 then
Result:=ModName;
except
end;
end;function GetPath(AFileName: string): string;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapShotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
//uses TLHelp32
result := '';
FSnapShotHandle := CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(AFileName))
or (UpperCase(FProcessEntry32.szExeFile ) = UpperCase(AFileName))) then
begin
result := GetProcessPath(FProcessEntry32.th32ProcessID);
break;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(GetPath('svchost.exe'));
end;end.
终于可以分享出这个小程序了如图:下载地址‘正在上传中......’