让程序自己更新本程序

 

先介绍一下 MOVEFILEEX 的使用.

移动文件:

MoveFileEx('c:/winnt/system32/xxxx.exe', 'd:/winnt.bak/system32/xxxx.exe',MOVEFILE_REPLACE_EXISTING);
MoveFileEx('c:/winnt/system32/xxxx.exe', 'd:/winnt.bak/system32/xxxx.exe',MOVEFILE_DELAY_UNTIL_REBOOT);


删除文件:

MoveFileEx('c:winnt/system32/xxxx.exe', nil,MOVEFILE_REPLACE_EXISTING);
MoveFileEx('c:winnt/system32/xxxx.exe', nil,MOVEFILE_DELAY_UNTIL_REBOOT);

 

我们再来看看用什么方法来实现程序自身的更新.

//拷贝副本,更新完删除副本,刚测试好

procedure  StartUpdate;
var
  vBatchFile: TextFile;
  vBatchFileName,vUpdateName: string;
  vProcessInfo: TProcessInformation;
  vStartUpInfo: TStartupInfo;
begin
  vBatchFileName :
=  ExtractFilePath(ParamStr( 0 ))  +   ' _deleteme.bat ' ;
  vUpdateName:
= ParamStr( 0 ) + ' _Update.exe ' ;
  AssignFile(vBatchFile, vBatchFileName);
  Rewrite(vBatchFile);
  Writeln(vBatchFile, 
' :try ' );
  Writeln(vBatchFile, 
' Copy " ' + ParamStr( 0 +   ' " " ' + vUpdateName + ' " ' );
  Writeln(vBatchFile, vUpdateName 
+   '  /UPDATE ' );
  Writeln(vBatchFile, 
' del " '   +  vUpdateName  +   ' " ' );
  Writeln(vBatchFile,
    
' if exist " '   +  vUpdateName  +   ' " '   +   '  goto try ' );
  Writeln(vBatchFile, 
' del %0 ' );
  CloseFile(vBatchFile);
  FillChar(vStartUpInfo, SizeOf(vStartUpInfo), $
00 );
  vStartUpInfo.dwFlags :
=  STARTF_USESHOWWINDOW;
  vStartUpInfo.wShowWindow :
=  SW_HIDE;
  
if  CreateProcess( nil , PChar(vBatchFileName),  nil nil ,
    False, IDLE_PRIORITY_CLASS, 
nil nil , vStartUpInfo,
    vProcessInfo) 
then
  
begin
    CloseHandle(vProcessInfo.hThread);
    CloseHandle(vProcessInfo.hProcess);
  
end ;
end ;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值