转贴:运行程序如何删除自身?(0分)

  • 主题发起人 主题发起人 littlefat
  • 开始时间 开始时间
L

littlefat

Unregistered / Unconfirmed
GUEST, unregistred user!
原文URL:http://www.delphipages.com/threads/thread.cfm?ID=113187&amp;G=113166<br><br>//大意是建立以下的批处理:<br>//:Delete_Exe<br>//if exist %1 goto Delete_Exe<br><br>稍加修改可以编程自动升级客户端的程序<br>//:Delete_Exe<br>//if exist %1 goto Delete_Exe<br>//%1<br><br>procedure TForm1.DelExe;<br>const<br>cBatCode=':delete_exe'+#13 +'del %s'+#13 +'if exist %s goto delete_exe'+#13 +'del %s';<br>var<br>&nbsp;List:TStringList;<br>&nbsp;BatPath:string;<br>&nbsp;S:string;<br>&nbsp;PI:TProcessInformation;<br>&nbsp;SI:TStartupInfo;<br>begin<br>&nbsp; BatPath:=ChangeFileExt(ParamStr(0),'.BAT');<br>&nbsp; List:=TStringList.Create;<br>&nbsp; try<br>&nbsp; &nbsp; S:=Format(cBatCode,[ParamStr(0),ParamStr(0),BatPath]);<br>&nbsp; &nbsp; List.Text:=S;<br>&nbsp; &nbsp; List.SaveToFile(BatPath);<br>&nbsp; finally<br>&nbsp; &nbsp; List.Free;<br>&nbsp; end;<br><br>&nbsp; FillChar(SI,SizeOf(SI),0);<br>&nbsp; SI.dwFlags:=STARTF_USESHOWWINDOW;<br>&nbsp; SI.wShowWindow:=SW_HIDE;<br><br>&nbsp; If CreateProcess(nil,PChar(BatPath),nil,nil,False,<br>IDLE_PRIORITY_CLASS,nil,nil,SI,PI) then<br>&nbsp; begin<br>&nbsp; &nbsp; CloseHandle(PI.hThread);<br>&nbsp; &nbsp; CloseHandle(PI.hProcess);<br>&nbsp; end;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; DelExe; &nbsp;//执行删除自身<br>&nbsp; Close; &nbsp; //一定要退出后才能删除,原文没有这一行,查看批处理,实际上是一个死循环,如程序不主动退出则无法删除。<br>end;<br><br>题外话,我想做一个自动升级客户端程序的功能,比如在局域网中约定一个共享目录中始终存放最新版本的程序,客户端每次启动时检查该共享目录中是否有新版本,如果有,则下载,然后删除自身,最后再运行新下载的版本。有一个问题是,根据什么来判断共享目录中的程序比当前的要新?<br><br>
 
我以前也曾经想过这问题,我提个建议,你用要准备删除的程序去启动另一个执行程序,这个程序应该能在系统中找到要删除的程序的执行句柄,然后把它先关闭,然后再找到这个要删除程序的文件,进行删除。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部