查错陵态的方法:
1、注释代码,部分代码注释尺肢源掉,看看有没有问题,然后注释其他不是,看看有没有问题,找到那一部分饥卖代码出现了问题。
2、如果只是调用dll出现的问题,可能是参数传递的有问题,换换参数传递的内容,类型等。
在运行里输入cmd进入命令提示符。然世亏后输入命令tasklist /m>c:/123.txt
不要急。到C盘下面去找一找,是不是有了一个123.txt?(当然。可以自己设定文件的输出路径,名字,甚至后缀。但要是文本文件哦。)
打开他。里面就是目前运行的各个程序正在调用的dll文件。
找出来了后问题就好办多了。打开任务管理帆返耐器。把对应的那个程序给关了。就可以顺利删除了。那就不必进安全模式,进DOS那么麻烦了。
当然态春。有些应用程序是以服务形式运行的。那么你就有可能查到的是svhost.exe但是。里面有很多个哦。。这个也好办。仍然打开命令提示符。输入
tasklist /svc,当然,也可以把他输出为文本文件,如tasklist
/svc>C:/234.txt。看到了吗?每个svchost.exe后面是不是对应有一个ID呢?有了ID一对照也可以知道是哪个服务了
不要用 WINEXEC, 用ShellExcute 执行用WaitForSingleObject等待其结束
winexec不会等待返回就直接跳下一步了,当然不行。
如果不会 shellexecute的话
WinExec('cmd /C '+'taskkill /f /派行银im Search.exe',0)
sleep(5000)
application.ProcessMessages
DeleteFile('c:\C:\Program Files\wsearch\Mouse1.dll')
好了 采纳尘宴吧
要是你实在实在不想用那两种方法的话
给你个函数, 比你调用dos 命令要有效率的带镇多
function KillTask(ExeFileName: string): Integer//关闭进程
const
PROCESS_TERMINATE = $0001
var
ContinueLoop: boolean
FSnapshotHandle: THandle
FProcessEntry32: TProcessEntry32
begin
Result := 0
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 := Integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0))
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32)
end
CloseHandle(FSnapshotHandle)
end
////// 调用用
KillTask('Search.exe');
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)