delphi怎样判断sqlservr.exe是否启动

delphi怎样在程序中判断系统中提供的某种服务已经启动?,比如delphi怎样判断sqlserver是否启动... delphi怎样在程序中判断系统中提供的某种服务已经启动? ,比如delphi怎样判断sql server是否启动 展开
 我来答
luotian0822
2009-12-08 · TA获得超过1395个赞
知道小有建树答主
回答量:1040
采纳率:33%
帮助的人:595万
展开全部
判断进程~~~~

uses TLHelp32
注意

function FindProcess(AFileName: string): boolean;
var
hSnapshot: THandle;//用于获得进程列表
lppe: TProcessEntry32;//用于查找进程
Found: Boolean;//用于判断进程遍历是否完成
begin
Result :=False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表
lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小
Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe记录中
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then
begin
Result :=True;
end;
Found := Process32Next(hSnapshot, lppe);//将进程列表的下一个进程信息读入lppe记录中
end;
end;
例子 if FindProcess( 'mysqld-nt.exe ') then memo1.Lines.Add( '发现SQL服务! ');
就烦条0o
2016-02-04 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
1、先use TLHelp32, PsAPI,使用其中Process32First的函数和Process32Next遍历所有进程。
2、然后判断是否存在scktsrvr.exe。
3、函数代码:
function checkAppExists(appN: string): Boolean;
var
lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
P:DWORD;
s:string;
begin
result := false;
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin
s := StrPas(lppe.szExeFile);
if lppe.th32ProcessID>0 then
p := lppe.th32ProcessID
else
p := 0;
if (s = appN) then
begin
Result:= True;
Break;
end;
found := Process32Next(Hand,lppe);
end;
end;
4、程序示例,判断sqlservr.exe是否存在:

procedure TForm1.btn1Click(Sender: TObject);
begin
if checkAppExists('sqlservr.exe') then
begin
ShowMessage('sqlservr.exe在运行!');
end
else
begin
ShowMessage('sqlservr.exe没有运行!');
end;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BEYOND0769
2009-12-10 · TA获得超过1912个赞
知道小有建树答主
回答量:769
采纳率:100%
帮助的人:725万
展开全部
添加uses TLHelp32
将判断进程运行写成一个函数比较简洁:
function CheckTask(ExeFileName: string): Boolean;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := False;
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(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
result := True;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
调用方法:CheckTask('sqlservr.exe'),如果返回True则进程正在运行,否则没有运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谦谦者
2009-12-17
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
判断进程不是好办法,去检测服务吧.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式