全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4028
推到 Plurk!
推到 Facebook!

版本更新問題

答題得分者是:pcboy2
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-22 13:55:17 IP:203.70.xxx.xxx 訂閱
各位前輩:
我想用delphi做一個判斷版本是否需要更新的小程式,但對這部份沒什麼概念,希望前輩們不吝指教。
首先我爬文後發現HCKER大大的一段文章似乎是比較適合新手的,如下:
Server 上建立一個txt 文檔,使用get txt 的內容,在show 的時候 對版本進行判斷, 當 txt 內的數值大於show 本身程式的數值時做你所需要的工作。 這是我寫的更新程式,比較簡單。也實用,呵呵

我想在我的電腦上建一txt文檔,想請問client可以用什麼方法來讀server上的txt檔?
是透過那個指令他才可以連接server?麻煩了....
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-22 16:43:03 IP:210.241.xxx.xxx 未訂閱
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls, ComCtrls, Shellapi,
ShlObj, ActiveX, ComObj, Registry, ExtCtrls,
IdHash, IdHashMessageDigest;
type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Memo1: TMemo;
Timer1: TTimer;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
Dir : String;
Now_Version, New_Version : String;
begin
Memo1.WordWrap:=False; // 不換行, 避免讀入的資訊被換行
//讀取目前版本
Memo1.Lines.LoadFromFile('Version.txt');
Now_Version:=Memo1.Lines[0];
// 取得網站上 Version.txt 中紀錄的版本
try
Dir:=GetCurrentDir '\Version.txt';
fs := TFileStream.Create(Dir, fmCreate);
IdHTTP1.Get('http://123.123.123.123/Version.txt', fs);
finally
fs.Free;
end;
Memo1.Lines.LoadFromFile('Version.txt');
New_Version:=Memo1.Lines[0];
// 如果有新版 , 下載
if StrToInt(now_version) < StrToInt(new_version) then
begin
try
Dir:=GetCurrentDir '\NewVersionProgram.exe'; // 下載後程式存放的路徑和檔名
fs := TFileStream.Create(Dir, fmCreate);
IdHTTP1.Get('http://123.123.123.123/Program.exe', fs);
finally
fs.Free;
end;
end;
end;

end.
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-25 10:40:49 IP:203.70.xxx.xxx 訂閱
感謝pcboy2大大
晚點我再來試看看
到時候有問題再煩請指教
謝謝!^^
lcjan
初階會員


發表:11
回覆:60
積分:29
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-25 18:23:38 IP:59.125.xxx.xxx 訂閱
我想在我的電腦上建一txt文檔,想請問client可以用什麼方法來讀server上的txt檔?

您可以透過網芳獲網路磁碟, 也可以透過FTP方式或Socket等方式進行更新.
Client端與Server端都必須有一份版本檔, 以便比對.
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-27 13:16:58 IP:203.70.xxx.xxx 訂閱
^^說實在的…我對這不熟!><
我是寫網頁的…
只能東摸西摸看看了!><
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-27 13:53:34 IP:61.219.xxx.xxx 未訂閱
網路芳鄰很好做啊, 假設您把該機掛成 Z:\ 
Memo1.Lines.LoadFromFile('VersionOnClient.txt');
Memo2.Lines.LoadFromFile('Z:\VersionOnServer.txt');
if ( Memo1.Lines[0] <> Memo2.Lines[0]) then
begin
// 版本有變動
end;
===================引 用 文 章===================

我想在我的電腦上建一txt文檔,想請問client可以用什麼方法來讀server上的txt檔?

您可以透過網芳獲網路磁碟, 也可以透過FTP方式或Socket等方式進行更新.
Client端與Server端都必須有一份版本檔, 以便比對.
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
bestlong
站務副站長


發表:125
回覆:734
積分:506
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-27 14:19:06 IP:60.248.xxx.xxx 未訂閱
其實架構不會太複雜,線上更新可以透過下列途徑取得更新檔案:
1.可以透過網路芳鄰處理,不過就會受限於區域網路的範圍
2.可以透過 HTTP 或 FTP 服務,這樣需要架設伺服器主機
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-12-27 14:25:50 IP:61.219.xxx.xxx 未訂閱
FTP 用法
IdFTP1.Username := 'pcboy'; // 帳號
IdFTP1.Password := 'happy'; // 密碼
IdFTP1.Host:='127.0.0.1';
IdFTP1.Connect();
IdFTP1.Get('VersionOnServer.txt', 'VersionOnServer.txt');
Memo1.Lines.LoadFromFile('VersionOnClient.txt');
Memo2.Lines.LoadFromFile('VersionOnServer.txt');
if ( Memo1.Lines[0] <> Memo2.Lines[0]) then
begin
// 版本有變動
end;
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-12-28 11:08:18 IP:203.70.xxx.xxx 訂閱
看來ftp的作法不錯
只要有ftp server的話應該很方便
把txt檔放在IdFTP1.Host路徑下囉?



===================引 用 文 章===================

FTP 用法
? IdFTP1.Username := 'pcboy';?// 帳號
? IdFTP1.Password := 'happy';?? // 密碼
? IdFTP1.Host:='127.0.0.1';
? IdFTP1.Connect();
? IdFTP1.Get('VersionOnServer.txt', 'VersionOnServer.txt');
Memo1.Lines.LoadFromFile('VersionOnClient.txt');
Memo2.Lines.LoadFromFile('VersionOnServer.txt');
if ( Memo1.Lines[0] <> Memo2.Lines[0]) then
begin
? // 版本有變動
end;
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2006-12-28 11:28:47 IP:61.219.xxx.xxx 未訂閱
可以放其他目錄
IdFTP1.Connect();
IdFTP1.ChangeDir('/NewDir'); // 假設 VersionOnServer.txt 在 /NewDir 目錄中
IdFTP1.Get('VersionOnServer.txt', 'VersionOnServer.txt');
===================引 用 文 章===================

把txt檔放在IdFTP1.Host路徑下囉?


------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
taihao
一般會員


發表:1
回覆:13
積分:2
註冊:2005-11-02

發送簡訊給我
#11 引用回覆 回覆 發表時間:2006-12-29 22:55:46 IP:61.221.xxx.xxx 訂閱
我是採用 Web 方式.(port80)
在HTML 加註 hidden 欄位.
Client端 Browser完畢後,讀取網頁資訊,比對 Application Verion ,
在決定是否 Update transfile.
我是採用 web download file ,當然,也可以用 FTP ,但 Server端還必須架設 FTP Server.
共享之.
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-01-03 09:39:06 IP:203.70.xxx.xxx 訂閱
hi~~
今天試了一下還挺ok的…
另外想請問幾個問題…
1、為啥我在程式執行後client端的Version.txt會變成跟server端的值一樣?
程式中有把server的Version.txt值寫入client端?怎麼小弟看不出來!^^"
2、現在是按button然後在memo中秀出Version.txt的值判斷後做處理嘛
現在我把memo的visible設false,那可以在form執行時就做判斷嘛?
3、如果2端的Version.txt值一樣的話我想叫出另一個exe檔,
我有看見shellapi的呼叫方法,不過好像找不到shellapi的元件!^^"
問題好像很多!^^"不過在這邊還學到挺多的!謝謝各位!^^
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-01-03 11:02:43 IP:61.219.xxx.xxx 未訂閱
> 1、為啥我在程式執行後client端的Version.txt會變成跟server端的值一樣?
程式中有把server的Version.txt值寫入client端?怎麼小弟看不出來!^^"
您用 FTP 方式 ? 如果 Server 和 Client 上您用相同檔案名稱 Version.txt
FTP 抓下來後檔案會被覆蓋, 值當然相同;
要先用不同名稱, 等判斷完下載新程式後才可以覆蓋 Version.txt
>2、如果client端值小於server端值會進行新版程式的下載嘛
可是在程式執行後並沒有下載新版本,我也確認我的檔案路徑沒錯^^"
請貼出您的程式來看
> 3、現在是按button然後在memo中秀出Version.txt的值判斷後做處理嘛
> 我可以在form執行時就做判斷嘛?

> 然後也不要有button、memo

>那我要用什麼東西來放Version.txt的值來做判斷比較好呢?
String
>如果2端的Version.txt值一樣的話我想叫出另一個exe檔,請問要用什麼元件呼叫咧!
叫出另一個exe檔 ? 聽不懂, 要執行某程式嗎 ?
Win32 API 的 ShellExecute

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-01-03 11:26:56 IP:203.70.xxx.xxx 訂閱
抱欠..我邊做邊發問..問題解決有再修改..
1、為啥我在程式執行後client端的Version.txt會變成跟server端的值一樣?
程式中有把server的Version.txt值寫入client端?怎麼小弟看不出來!^^"
我是用idhttp的方法
2、現在我把memo的visible設false,然後在form執行時就做判斷,應該是沒問題
我有看見他下載新版程式了,他是自己下載的,我以為會先詢問是否要下載!^^"
3、如果2端的Version.txt值一樣的話我想叫出另一個exe檔,
就是執行同目錄下的另一個exe檔,用Win32 API 的 ShellExecute??
我找不到呢!><我是用delphi 7
請問ShellExecute(handle, 'Open', PChar('test123.exe'), Nil, Nil SW_SHOWNORMAL);
這樣對嘛?

pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-01-03 12:28:07 IP:61.219.xxx.xxx 未訂閱
uses ShellAPI;
ShellExecute(handle, 'Open', PChar('C:\WINDOWS\SYSTEM32\NOTEPAD.exe'), Nil, Nil, SW_SHOWNORMAL);

ShellExecute(handle, 'open', 'C:\WINDOWS\SYSTEM32\NOTEPAD.exe','', '', SW_SHOWNORMAL);
要看說明的話, 選 [Help]下拉選單, 選 [Windows SDK], 輸入 ShellExecute
(小弟也是用 Delphi 7)
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-01-03 12:32:03 IP:203.70.xxx.xxx 訂閱
如果呼叫出exe後可以把原來偵測版本的DELPHI程式關閉嘛?
===================引 用 文 章===================

uses ShellAPI;
ShellExecute(handle, 'Open', PChar('C:\WINDOWS\SYSTEM32\NOTEPAD.exe'), Nil, Nil, SW_SHOWNORMAL);

ShellExecute(handle, 'open', 'C:\WINDOWS\SYSTEM32\NOTEPAD.exe','', '', SW_SHOWNORMAL);
要看說明的話, 選 [Help]下拉選單, 選 [Windows SDK], 輸入 ShellExecute
(小弟也是用 Delphi 7)
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-01-03 12:48:01 IP:61.219.xxx.xxx 未訂閱
程式執行完畢就自動關閉了啊 ~
ShellExecute 開啟的 exe 程式仍會存在
===================引 用 文 章===================

如果呼叫出exe後可以把原來偵測版本的DELPHI程式關閉嘛?

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-01-03 13:19:12 IP:203.70.xxx.xxx 訂閱
是可以開啟另一個exe檔了沒錯…
我是想問是否可以在開啟exe檔後關閉這個偵測版本的程式…
我試過了…他好像沒有自動關閉!^^"
另外程式上面的標題列含放大、縮小、關閉的那列可以隱藏嘛?
form可以固定大小嘛?

快完成了!^^"希望大大再指點一番…
===================引 用 文 章===================

程式執行完畢就自動關閉了啊 ~
ShellExecute 開啟的 exe 程式仍會存在
===================引 用 文 章===================

如果呼叫出exe後可以把原來偵測版本的DELPHI程式關閉嘛?
?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#19 引用回覆 回覆 發表時間:2007-01-03 13:39:59 IP:61.219.xxx.xxx 未訂閱
程式關閉
Application.Terminate;
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#20 引用回覆 回覆 發表時間:2007-01-03 13:59:04 IP:203.70.xxx.xxx 訂閱
感謝pcboy2大大的鼎力幫忙
也謝謝其他大大的方法以及站上其它篇文章的幫忙
最後我用TIdHTTP做完了
感謝pcboy2、感謝大家!


系統時間:2017-11-19 22:14:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!