如何写在线更新?(50分)

  • 主题发起人 主题发起人 51100k
  • 开始时间 开始时间
5

51100k

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi 写一段代码 ,自动从网络上下载文件,然后更新自己写的程序
 
话题1616262的标题是: 软件自动升级 (0分)
分类:非技术问题 Lotus123 (2003-02-25 19:32:00)
如题,如何通过Http方式自动升级应用程序?

zbsfg (2003-02-11 19:44:00)
关注,up

农夫 (2003-02-11 19:49:00)
web server、soap大概还行吧

bigroute (2003-02-11 20:11:00)
须要自己做一个升级的模块,
在HTTP服务上放一个文本文件,用于存放新文件的列表,
————————-/文本内容
1.exe
2.exe
3.dbf
4.dat
5.mdb
————————
升级程序运行时自动查找HTTP服务器上的这个文本文件,如果里面有内容,
就把里面的文件列表按顺序GET下来复盖原有文件就算升级了。

xianguo (2003-02-11 20:18:00)
TO bigroute:
能说的具体一点吗?

xianguo (2003-02-11 21:08:00)
使用NMHTTP控件吗?什么方法?

sunsong (2003-02-11 22:16:00)
严重关注!

张辉明 (2003-02-11 22:43:00)
2002年程序员合订本,有相关介绍。

bigroute (2003-02-12 8:32:00)
var
sResponesFile :TMemoryStream;
begin
sResponesFile :=TMemoryStream.Create();
sResponesFile.Clear ;
sResponesFile.Position :=0;
IdHTTP1.Host := sHost ;
IdHTTP1.Port := sPort ;
IdHTTP1.Connect ;
if IdHTTP1.Connected then
begin
IdHTTP1.Get('http://www.china.com/a.jpg',sResponesFile);
sResponesFile.Position :=0;
sResponesFile.SaveToFile('c:/a.jpg');
end
else
begin
ShowMessage('未找到HTTP服务器');
end;
FreeAndNil(sResponesFile);
end;




sohuandsina (2003-02-12 8:35:00)
给我发信,我给你发个demo。简单了点,不过思路是一样的。
lovecarbe@hotmail.com


sohuandsina (2003-02-12 8:54:00)
我已经发给你了。你去看看信箱。

Lotus123 (2003-02-12 12:21:00)
TO sohuandsina:
没收到,请发送到xianguochen@21cn.com

Lotus123 (2003-02-12 12:24:00)
TO bigroute:
TIdHTTP1控件是第三方控件吧?能不能利用delphi自己的控件?(我用的是D5)

sohuandsina (2003-02-12 13:10:00)
xianguochen@21cn.com也发过了。

我这个也是idhttp1。d5上需要自己安装,你为什么不用d6。d6已经把这个集成上去了。

Lotus123 (2003-02-12 13:17:00)
TO sohuandsina:
可以用NMHttp控件吗?我用的是D5,暂时没有用D6/D7的计划(给公司做事就是这样)

Lotus123 (2003-02-12 13:20:00)
另外没有收到你发送的程序

sohuandsina (2003-02-12 13:22:00)
我刚才发给你的就是nmhttp的。。
好吧。我看你太麻烦了。
我给你http地址。你自己去下载。
http://www.hflib.gov.cn/sendmail.rar

sohuandsina (2003-02-12 13:30:00)
收到了跟我说一声,我就把那个文件给删掉。

Lotus123 (2003-02-12 13:33:00)
To sohuandsina:
谢谢,收到了,不过我想用NMHttp控件,而非nmsmtp

春意 (2003-02-12 13:46:00)
bigroute老兄的方法不错,不过由我改了一下!!(测试通过)delphi 6.0
procedure TForm1.Button1Click(Sender: TObject);
var
sResponesFile :TMemoryStream;
filename: String;//图片名
begin
filename := ExtractFilePath(Application.ExeName)+ 'ycy.jpg';
sResponesFile :=TMemoryStream.Create();
sResponesFile.Clear ;
sResponesFile.Position :=0;
IdHTTP1.Host := 'www.hhkjnj.com' ;
IdHTTP1.Port := 80 ;
IdHTTP1.Connect ;
if IdHTTP1.Connected then
begin
IdHTTP1.Get('http://www.hhkjnj.com/data/bk1.jpg',sResponesFile);
sResponesFile.Position :=0;
sResponesFile.SaveToFile(filename);
Image1.Picture.LoadFromFile(filename); //将刚才的下载图片进行升级
ShowMessage('升级成功!');
end
else
begin
ShowMessage('未找到HTTP服务器');
end;
FreeAndNil(sResponesFile);
end;

//谢谢大家,DFW真好!

sohuandsina (2003-02-12 13:43:00)
我都被你搞糊涂了。

是这个http://www.hflib.gov.cn/testdate.rar
对不起!

虽然是idhttp,语法基本上一样的。你换成nmhttp的用法就行了。


forss (2003-02-12 13:46:00)
绝对不要用DELPHI自带的NMHTTP,,它不能断点续传的,,NMFTP也是。。
而且对于网路环境不好情况下,无法正常下载到。。建议抽取出INDY或其他的里面的HTTP
单元来用,
我是把王寒松写的NETUPDATE修改后加到我自己系统里面来的。很好用。:)
原来的NETUPDATE有一些BUG,我已经改过了。

爱元元的哥哥 (2003-02-12 13:55:00)
//-----------------------------------------------------------------------------
//司马华鹏
unit UnitDownload;

interface
uses
Windows, Variants, Classes, Messages, SysUtils;

function GetInetFile (const fileURL, FileName: String): boolean;

implementation

uses
Wininet;

function GetInetFile (const fileURL, FileName: String): boolean;
const
BufferSize = 1024;
var hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
Result:= False;
sAppName := ExtractFileName(Paramstr(0));
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,0,0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer,
SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
end.


Lotus123 (2003-02-12 14:14:00)
To sohuandsina:
NMHttp.Get是一个过程,而非函数!

Lotus123 (2003-02-12 14:18:00)
To 爱元元的哥哥:
repeat
...
until BufferLen = 0;
这一段有问题吧,我执行后生成了一个几百M的文件
(!我的源文件是Exe文件)


sohuandsina (2003-02-12 14:23:00)
procedure TForm1.Button1Click(Sender: TObject);
var Load:TFileStream;
begin
edit1.Text:=http1.Get('http://www.hflib.gov.cn/date.ser');
//获得本地时间
//edit2.Text:=formatdatetime('yyyy-mm-dd ',now)
//edit2.Text:=formatdatetime('yyyy-mm-dd hh:mm:ss',now);
//edit2.Text:=datetimetostr(now);
//使用注册表读文件,不可取,,系统稳定要求高
// Reg:= TRegistry.Create;
// Reg.RootKey := HKEY_CURRENT_USER;
// Reg.OpenKey('/Software/My Software', True);
// Reg.WriteString('版本', Edit2.Text);
// Reg.CloseKey;
// Reg.Free;
//Assignfile(file,'edit.txt');
//rewrite(file);
Load:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'date.loc',fmOpenRead);
try
memo1.lines.LoadFromStream(load);
finally
load.Free;
end;
end;




针对这个http1为idhttp改为用nmhttp

//edit1.Text:=http1.Get('http://www.hflib.gov.cn/date.ser');
你用nmhttp可以改为:
nmhttp1.Get('http://www.hflib.gov.cn/date.ser');
edit1.text:=nmhttp1.Body;

我想写到这,这个问题已经解决了吧。道理是一样的。。。。。
希望你自己想想了。

Lotus123 (2003-02-12 15:02:00)
你们最好测试后再将代码贴上来
!我的源文件为可执行文件

sohuandsina (2003-02-12 16:37:00)
我发也发给你了。改过的代码,我也测试运行过了。。。。可以执行的啊。

Lotus123 (2003-02-12 19:29:00)
TO sohuandsina:
可是我下载过来的文件只有3字节(实际有1M左右)

csz (2003-02-13 11:15:00)
各位大虾,刚好我也有这个任务,用nmhttp下载是实现了
可是该怎么上传文件呢?

JohnSun2002 (2003-02-13 11:34:00)
10'关注

Lotus123 (2003-02-13 11:35:00)
TO csz:
能发一段代码过来吗?谢谢!
xianguochen@21cn.com

bigroute (2003-02-13 12:11:00)
D6里TIdHTTP1不是第三方控件。

Lotus123 (2003-02-13 12:16:00)
To bigroute:
我用D5,有什么好办法????

gglrobin (2003-02-13 12:57:00)
顶一下

csz (2003-02-13 13:22:00)
to Lotus123:
其实方法和他们上面说的是一样的:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
NMHTTP1.InputFileMode := True;
NMHTTP1.Body := ("C:/xxx.txt"); //保存到本地的路径
NMHTTP1.Get("http://xxx.com/xxx.txt");//文件web地址
NMHTTP1.Disconnect ;
ShowMessage('Download file ok!');
except
on E : Exception do
ShowMessage(E.Message) ;
end;
end;


ZHMZHMZHM (2003-02-13 20:03:00)
用Delphi存取我们公司网站上的Access数据库怎么做,最好有Demo
plq163001@163.com
谢谢!

tohappy (2003-02-14 21:50:00)
要有ftp权限,我有现成的例子,请给我信箱。

峻祁连 (2003-02-14 22:21:00)
关注啊

ZHMZHMZHM (2003-02-15 10:20:00)
TO:
tohappy
能把你的例子发一份给小弟吗?谢谢!
plq163001@163.com


gglrobin (2003-02-15 11:32:00)
我也要一份呀
gglrobin@163.net

Lotus123 (2003-02-15 14:42:00)
To tohappy:
我现在所做的项目就是通过Ftp下载的。由于用户会经常调整口令,
导致Ftp无法连接,所以才想用别的办法来实现自动升级。
若有其他办法,请Mail to: xianguochen@21cn.com

王公子 (2003-02-21 17:58:00)
有点用,留着先

Lotus123 (2003-02-25 19:32:00)
多人接受答案了。

 
接受答案了.
 
后退
顶部