关于软件升级的解决方案
现在是这样的情况。在同一个局域网中有几十台电脑上面都安装了我们开发的软件。现在又一个这样的情况。每次程序更新了 需要每一台电脑就要进行 复制、粘贴的操作。
我现在做了这样的方法在一台电脑上共享一个文件夹 将更新的程序放到里面,然后再每一个客户端都拷贝一个.bat的文件。这个文件的内容就是 双击它就会将服务器上的文件自动复制并替换到本地计算机。
但是没一个客户端都需要安装一个BAT文件 并且如果 放更新程序的电脑的IP地址一改变就需要将各个客户机电脑的.BAT文件修改一遍 太费劲了。大家伙有什么好的解决方案吗?
[解决办法]
我编了一个数据库操作的软件,我一般是把新更新包用流的方式存放在数据库,然后软件启动时不是直接运程序,而是运行另外一个更新程式,发现有版本变更有从数据库下载到本地,再用BAT文件COPY覆盖原来的程序包,如果没有更新包就直接使用API函数调用主程式。
procedure TForm1.FormShow(Sender: TObject);
var
Img_No,Font_No:string;
SW_Ver,TempStr,MainStr:string;
Main_Ver:string;
File_Name:string;
Row_Int,i:Integer;
begin
qry2.Close;
qry2.SQL.Clear;
qry2.SQL.Add('select * from 软件更新');
qry2.Open;
Row_Int:=qry2.RecordCount;
RzVersionInfo1.FilePath:=ExtractFilePath(Application.ExeName)+'Ex.exe';
Main_Ver:=RzVersionInfo1.FileVersion;//查询数据库内更新包的版本
SW_Ver:=qry2.fieldbyname('标题').AsString;
if Main_Ver<>SW_Ver then//假如版本与现在程序版本不同
begin
if Application.MessageBox('系统检测有更新版,你现在要立即更新吗?',
'警告', MB_YESNO + MB_ICONWARNING + MB_DEFBUTTON2 + MB_TOPMOST) =
IDYES then
begin
while not qry2.Eof do
begin
File_Name:=qry2.fieldbyname('文件名').AsString;
TBlobField(qry2.FieldByName('附件')).SaveToFile(ExtractFilePath(Application.ExeName)+'\Temp\'+ File_Name +'');//将更新包下载到相对目录下的TEMP文件夹
qry2.Next;
end;
TempStr:=ExtractFilePath(Application.ExeName)+'Temp\';
MainStr:=ExtractFilePath(Application.ExeName);
ShellExecute(handle,'open','copy.bat',nil,nil,SW_SHOWNORMAL);//调用BAT文件COPY下载的更新文件
end;
end else
begin
ShellExecute(handle,'open','EX.exe',nil,nil,SW_SHOWNORMAL);//如果没有更新包则用API直接调用EX.EXE执行文件。
end;
Application.Terminate;//完成上面的操作关闭更新程序
end;
希望对你有用!
[解决办法]
我用的也是类似楼上的方法,最新的程序放在服务器,客户端先运行更新程序,更新程序比照服务器及客户端程序的时间,如果有更新的程序,从服务器拷贝过来,再调用系统主程序,通出更新程序
[解决办法]
我是用ftp的,主程序、升级程序2个exe,可以互相更新,但感觉ftp不太好用。
[解决办法]
1、将文件存放在数据库中;
2、客户端程序启动时,检测中否有新版,在启动Autodown程序。
3、Autodown程序结束,重新调用主程序。
[解决办法]
自动更新嘛,Delphi有个Http自动下载更新的控件