如何在DELPHI中实现程序自动到FTP升级?(50分)

  • 主题发起人 主题发起人 奔跑的爱情
  • 开始时间 开始时间

奔跑的爱情

Unregistered / Unconfirmed
GUEST, unregistred user!
我想让我的程序实现自动到我的FTP升级!这样的话,我就不用再给客户一一传送EXE文件了.实现功能为:当客户启动系统时就自动检测FTP,看一下有没有与当前文件版本不相同的同名文件,如果有就进行升级,如果没有就不升级,请问各位高手?这个功能不何实现?谢谢
 
用AutoUpgrader Pro
这个组件就可以很简单的实现此功能了
 
你的这个问题要用webbrowser或indy,具体抄一段别人的代码
应用:现在很多程序都有自动升级功能,实际上就是应用了GET.先在自己站点放一个文本文件注明程序版本号,当检查升级的时候,取文本内容与当前版本号比较,然后决定升级与否.

实际上,GET还可以用在其它方面,前提是与你的网页文件挂钩.例如,你的个人站点放在你的硬盘上面,你在http://my.yeah.net申请了一个免费的域名,你将URL指向你的IP.但是你的IP是动态的,经常会改变,每次改变后需要手工打开http://my.yeah.net站点进行设置是非常麻烦的.这时候,你可以自己动手写一个程序.
首先,我们来写两个函数从返回页面里提取我们需要的信息.

function GetInfoByYearNetHtm1(const str:string):String;
{
功能:从Yeah.Net的域名申请和修改返回网页文件中提取需要的信息
参数:Yeah.Net的网页文件内容
输出:实际的信息
作者:陈经韬
日期:2003,2,8
修改:无
}
const
SubColor='<font color=red>';
SubCenter1='<center>';
SubCenter2='</center>';
var
S:String;
i,j,k:integer;
begin
Result:='';
S:=str;

j:=0;
repeat
i:=Pos(SubColor,LowerCase(S));
if i=0 then break;
if Length(s)<(i+Length(SubColor)-1) then Break;
Delete(S,1,i+Length(SubColor)-1);

i:=Pos(SubCenter1,LowerCase(S));
if i=0 then break else if i<=10 then j:=-1;
until j=-1;

k:=Pos(SubCenter2,LowerCase(S));
S:=Copy(S,i+Length(SubCenter1),k-i-Length(SubCenter1));

k:=0;
repeat
i:=pos('<',s);
j:=pos('>',s);
if (i=0) or (j=0) then Break;
Delete(s,i,j-i+1);
Insert(' ', S, i);
until k=-1;
s:=s+'.';
Result:=s;
end;

function GetInfoByYearNetHtm2(const Str:String):String;
{
功能:从Yeah.Net的域名转向返回网页文件中提取需要的信息
参数:Yeah.Net的网页文件内容
输出:实际的信息
作者:陈经韬
日期:2003,2,8
修改:无
}
var i,j,k:integer;
begin
Result:='';
i:=Pos('url=',Str);
if i=0 then Exit;
i:=i+4;
j:=Pos('',Str);
if i=0 then Exit;
j:=j-2; k:=j-i;
Result:=copy(Str,i,k);
end;

第一步,我们先来实现注册功能.放上五个Edit控件分别代表注册用户名称,密码1,密码2,Email地址和需要指向的URL.然后用GET方式来注册:

procedure TForm1.Button1Click(Sender: TObject);
var
StrRecive:String;
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('正在申请域名!');
try
StrRecive:=IdHTTP1.Get('http://my.yeah.net/cgi-bin/register?username='+Edit1.Text//注册名称
+'&domain=yeah.net'
+'&password='+Edit2.Text//密码1
+'&password2='+Edit3.Text//密码2
+'&email='+Edit4.Text//注册人Email地址
+'&url=http://'+Edit4.Text);//该域名指向的URL
Memo1.Lines.Add(GetInfoByYearNetHtm1(StrRecive));
except
Memo1.Lines.Add('申请域名错误!请检查网络!');
end;
end;

第二步,当你需要更新自己的IP地址的时候:

procedure TForm1.Button2Click(Sender: TObject);
var
StrRecive:String;
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('正在更新域名!');
try
StrRecive:=IdHTTP1.Get('http://my.yeah.net/cgi-bin/modify?username='+Edit1.Text//注册名称
+'&domain=yeah.net'
+'&password='+Edit2.Text//密码1
+'&url=http://'+Edit4.Text);//该域名指向的URL
Memo1.Lines.Add(GetInfoByYearNetHtm1(StrRecive));
except
Memo1.Lines.Add('更新IP错误!请检查网络!');
end;
end;

第三步:当然是你的程序取的真实指向了:)

procedure TForm1.Button3Click(Sender: TObject);
begin
try
Memo1.Lines.Add(GetInfoByYearNetHtm2(IdHTTP1.Get(Edit4.Text)));//eg:http://lovejingtao.yeah.net
except
Memo1.Lines.Add('更新IP错误!请检查网络!');
end;
end;
 
我也想说那个东东呢!
给你地址下载吧!
http://new.playicq.com/dispdocnew.php?id=8062
这个版本的有源代码,放心使用吧!
 
我相要 samples
 
老大提供的地址,无法下载,需要钱!我没有Money啊!我是穷光蛋!嘿嘿
 
这几天我刚好为朋友写了一个自动下载更新的程序(还支持断点续传),我也省去了每周跑去给他更新.exe的烦恼。
 
可传一个示例到我的邮箱呢?谢谢!
songhao888@sina.com
 
IF 可否将示例发给我学习学习呢?谢谢
 
建议不要用FTP方式,需要校验密码。用TNMHTTP吧

MyHttp := TNMHTTP.Create(Application);
Try
MyHttp.Host := _sHttpHost;
MyHttp.Port := _iPort;
MyHttp.InputFileMode := True;
MyHttp.Body := sFielName;
MyHttp.Get('Http://' + _sHttpHost + '/' + psFileName);
MyHttp.InputFileMode := False;
Finally
MyHttp.Disconnect;
MyHttp.Free;
End;
 
IF 偶也想要参考参考~~
呵呵
 
????????????
 
这是一个通过web自动升级程序的小东东(源码)。
比较毛糙,基本功能有:
1.判断是否有新的文件需要更新。
2.需更新文件能列表显示。
3.可关键字指定类型如:(DV)直接覆盖,(DL)不覆盖,(DR)覆盖并运行,(TR)下载到临时文件夹运行。
4.下载进度显示。

其他功能请自行完善,如您做了更好的版本,请mail给我一份。

support@mei-lian.com
fuchengrong@hotmail.com

下载地址: http://www.mei-lian.com/data/update.rar

 
后退
顶部