网上看到一个程序升级步骤是这样的:
软件第一次运行,估计是后台检查http上有无更新文件;不管有没有更新文件,此次运行 不出现如何升级提示。
第二次运行时该软件时 软件在任务栏中自动更新到最新版后再自动打开软件。
单文件升级,请告知源码!
谢谢,新人第一个帖子,希望能有高人指点!
软件第一次运行,估计是后台检查http上有无更新文件;不管有没有更新文件,此次运行 不出现如何升级提示。
第二次运行时该软件时 软件在任务栏中自动更新到最新版后再自动打开软件。
单文件升级,请告知源码!
谢谢,新人第一个帖子,希望能有高人指点!
2 如比自己新,则下载。
3 重新启动时候本地覆盖掉原文件。
主要就用下面的语句了。ShellExecute(handle, 'Open', PChar(fileName), nil, nil, SW_NORMAL);
在你关闭的时候 运行一个 bat比如 ping 127.0.0.1
copy a.tmp a.exe
用 SW_HIDE 模式这样就会自动替换掉了.
var
verinfosize : DWORD;
verinfo : pointer;
vervaluesize : dword;
vervalue : pvsfixedfileinfo;
dummy : dword;
v1,v2,v3,v4 : word;
begin
verinfosize := getfileversioninfosize(pchar(paramstr(0)),dummy);
if verinfosize = 0 then begin
dummy := getlasterror;
result := '0.0.0.0';
end;
getmem(verinfo,verinfosize);
getfileversioninfo(pchar(paramstr(0)),0,verinfosize,verinfo);
verqueryvalue(verinfo,'\',pointer(vervalue),vervaluesize);
with vervalue^ do begin
v1 := dwfileversionms shr 16;
v2 := dwfileversionms and $ffff;
v3 := dwfileversionls shr 16;
v4 := dwfileversionls and $ffff;
end;
result := inttostr(v1) + '.' + inttostr(v2) + '.' + inttostr(v3) + '.' + inttostr(v4);
freemem(verinfo,verinfosize);
end;
//将新版本号写道页面的version id中;读取新版本号
newver:=WebBrowser1.OleObject.document.parentWindow.version.innerText; //获取新版本号
oldver:= GetBuildInfo; //获取当前软件版本号
if Trim(newver)='' then newver:= oldver ;
nver:= strtoint(StringReplace(newver,'.','',[rfReplaceAll]));
over:= strtoint(StringReplace(oldver,'.','',[rfReplaceAll]));if nver>over then
begin if MessageBox(Handle,'发现新版本,点击确定后下载','提示',MB_OKCANCEL)=1 then
begin MyStream:=TMemoryStream.Create;
idhttp1.HandleRedirects:=true;
idhttp1.ReadTimeout:=60000;
try
IdHTTP1.Get('http://升级的程序名.exe,MyStream);
except
Showmessage('网络出错!');
MyStream.Free;
Exit;
end;
MyStream.SaveToFile(ExtractFilePath(ParamStr(0))+inttostr(nver)+'.exe');
MyStream.Free; //下载完成
BatchFileName := ExtractFilePath(ParamStr(0)) + 'update.bat';
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile); //开始向这个bat文件写入内容
Writeln(BatchFile,'@echo off');
Writeln(BatchFile,':try');
Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
Writeln(BatchFile, 'if exist "' + ParamStr(0) + '"' + ' goto try');
//-----------
Writeln(BatchFile,':loop');
Writeln(BatchFile,'copy "' +inttostr(nver)+'.exe" ' +' "' +ExtractFilePath(ParamStr(0))+ExtractFileName(ParamStr(0))+'"');
Writeln(BatchFile, 'if not exist "' + ParamStr(0) + '"' + ' goto loop');
//-----------
Writeln(BatchFile, 'del "' + ExtractFilePath(ParamStr(0))+inttostr(nver)+'.exe ' + '"');
Writeln(BatchFile, 'del %0');
CloseFile(BatchFile); //写入内容结束
WinExec('update.bat', SW_HIDE);
DeleteSelf;
// ShowMessage();
end;
end
else
begin
MessageBox(Handle,'当前版本为最新版本','提示',MB_OK)
end;end;以上是我找的代码,并测试ok,请各位指点,谢谢了!