创建删除文件的功能实现(求助!) 本帖最后由 xingyu198932 于 2012-03-24 18:41:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要删的exe是它自身吗?echo . > xxx.exe也是覆盖 winexec调用了外部CMD,在taskkill /f /t /im yuancheng.exe还没有执行完,你就执行DeleteFile yuancheng程序还在调用肯定无法删除, function RunWait(FileName: string; Visibility: Integer): THandle;var zAppName: array[0..512] of Char; zCurDir: array[0..255] of Char; WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation;begin try StrPCopy(zAppName, FileName); GetDir(0, WorkDir); StrPCopy(zCurDir, WorkDir); FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, nil, nil, false, Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin result := 0; Exit; end else begin WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, result); end; finally end;end;用这个函数试试var sr:TSearchRec; // FileName: string; // i: Integer;beginif FindFirst(m_Client+'*.log',faAnyFile,sr)=0 then \\m_Client 是当面目录 begin repeat RunWait('Qkill.cmd',0); \\关闭远程连接程序 DeleteFile(m_Client+sr.name); \\删除日志文件 DeleteFile(PChar(m_Client)+'!php.txt'); \\删除php文本 DeleteFile(PChar(m_Client)+'!Gonfig.ini'); \\删除配置文件 DeleteFile(PChar(m_Client)+m_sDatClient); DeleteFile(PChar(m_Client)+'yuancheng.exe'); \\删除yuancheng.exe until FindNext(sr)<> 0; FileCreate((m,Client)+'yuancheng.exe'); \\创建一个0字节的yuancheng.exe end;end; function RunWait(FileName: string; Visibility: Integer): THandle;var zAppName: array[0..512] of Char; zCurDir: array[0..255] of Char; WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation;begin try StrPCopy(zAppName, FileName); GetDir(0, WorkDir); StrPCopy(zCurDir, WorkDir); FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, nil, nil, false, Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin result := 0; Exit; end else begin WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, result); end; finally end;end;用这个函数试试var sr:TSearchRec; // FileName: string; // i: Integer;beginif FindFirst(m_Client+'*.log',faAnyFile,sr)=0 then \\m_Client 是当面目录 begin repeat RunWait('cmd /c taskkill /f /t /im yuancheng.exe',0); \\关闭远程连接程序 DeleteFile(m_Client+sr.name); \\删除日志文件 DeleteFile(PChar(m_Client)+'!php.txt'); \\删除php文本 DeleteFile(PChar(m_Client)+'!Gonfig.ini'); \\删除配置文件 DeleteFile(PChar(m_Client)+m_sDatClient); DeleteFile(PChar(m_Client)+'yuancheng.exe'); \\删除yuancheng.exe until FindNext(sr)<> 0; FileCreate((m,Client)+'yuancheng.exe'); \\创建一个0字节的yuancheng.exeend;end; 把RunWait函数实现部份放在implementation后面就可以在单元里和系统Api一样来调用了 如果是删除exe自身则可能是太快exe未退出而无法删除可以生成一个bat,由它来删exe,并可以任意延时几秒再删 很简单使用延时函数SLEEP(1000); 请问怎么从数据库动态创建按钮事件代码? delphi dbgrid的显示问题 居然用完了30个回复,没得玩了 如何动态读取popupmenu的caption值 Formula one控件怎样插入图片和对象啊? 如何向inifile中写入注释? 一个编程难题,谁给我提供一下思路?有源码更好 散分5 新手求教:局域网通讯控制的问题! 请问在combobox中如何加入列表 delphi中能否变通地实现宏代换? 怎样把记事本文件(*.txt)转化为*.rc文件
也是覆盖
程序还在调用肯定无法删除,
var
zAppName: array[0..512] of Char;
zCurDir: array[0..255] of Char;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
try
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil, zAppName, nil, nil, false, Create_NEW_CONSOLE
or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
begin
result := 0; Exit;
end
else
begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, result);
end;
finally
end;
end;
用这个函数试试var
sr:TSearchRec;
// FileName: string;
// i: Integer;begin
if FindFirst(m_Client+'*.log',faAnyFile,sr)=0 then \\m_Client 是当面目录
begin
repeat
RunWait('Qkill.cmd',0); \\关闭远程连接程序
DeleteFile(m_Client+sr.name); \\删除日志文件
DeleteFile(PChar(m_Client)+'!php.txt'); \\删除php文本
DeleteFile(PChar(m_Client)+'!Gonfig.ini'); \\删除配置文件
DeleteFile(PChar(m_Client)+m_sDatClient);
DeleteFile(PChar(m_Client)+'yuancheng.exe'); \\删除yuancheng.exe
until FindNext(sr)<> 0;
FileCreate((m,Client)+'yuancheng.exe'); \\创建一个0字节的yuancheng.exe
end;
end;
var
zAppName: array[0..512] of Char;
zCurDir: array[0..255] of Char;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
try
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil, zAppName, nil, nil, false, Create_NEW_CONSOLE
or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
begin
result := 0;
Exit;
end
else
begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, result);
end;
finally
end;
end;
用这个函数试试var
sr:TSearchRec;
// FileName: string;
// i: Integer;
begin
if FindFirst(m_Client+'*.log',faAnyFile,sr)=0 then \\m_Client 是当面目录
begin
repeat
RunWait('cmd /c taskkill /f /t /im yuancheng.exe',0); \\关闭远程连接程序
DeleteFile(m_Client+sr.name); \\删除日志文件
DeleteFile(PChar(m_Client)+'!php.txt'); \\删除php文本
DeleteFile(PChar(m_Client)+'!Gonfig.ini'); \\删除配置文件
DeleteFile(PChar(m_Client)+m_sDatClient);
DeleteFile(PChar(m_Client)+'yuancheng.exe'); \\删除yuancheng.exe
until FindNext(sr)<> 0;
FileCreate((m,Client)+'yuancheng.exe'); \\创建一个0字节的yuancheng.exe
end;
end;
则可能是太快exe未退出而无法删除
可以生成一个bat,由它来删exe,并可以任意延时几秒再删
使用延时函数SLEEP(1000);