让程序自己更新本程序

 

先介绍一下 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), nilnil,
    False, IDLE_PRIORITY_CLASS, 
nilnil, vStartUpInfo,
    vProcessInfo) 
then
  
begin
    CloseHandle(vProcessInfo.hThread);
    CloseHandle(vProcessInfo.hProcess);
  
end;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值