让程序自己更新本程序

先介绍一下 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;
让程序自己更新本程序

相关文章: