版本更新問題 |
答題得分者是:pcboy2
|
kk714
一般會員 發表:4 回覆:14 積分:3 註冊:2004-11-02 發送簡訊給我 |
各位前輩:
我想用delphi做一個判斷版本是否需要更新的小程式,但對這部份沒什麼概念,希望前輩們不吝指教。 首先我爬文後發現HCKER大大的一段文章似乎是比較適合新手的,如下:
我想在我的電腦上建一txt文檔,想請問client可以用什麼方法來讀server上的txt檔? 是透過那個指令他才可以連接server?麻煩了.... | |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
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 發送簡訊給我 |
||
lcjan
初階會員 發表:11 回覆:60 積分:29 註冊:2002-03-13 發送簡訊給我 |
||
kk714
一般會員 發表:4 回覆:14 積分:3 註冊:2004-11-02 發送簡訊給我 |
||
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
網路芳鄰很好做啊, 假設您把該機掛成 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
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
||
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
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 發送簡訊給我 |
看來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 發送簡訊給我 |
可以放其他目錄
IdFTP1.Connect(); IdFTP1.ChangeDir('/NewDir'); // 假設 VersionOnServer.txt 在 /NewDir 目錄中 IdFTP1.Get('VersionOnServer.txt', 'VersionOnServer.txt'); ===================引 用 文 章=================== 把txt檔放在IdFTP1.Host路徑下囉?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
|
taihao
一般會員 發表:1 回覆:13 積分:2 註冊:2005-11-02 發送簡訊給我 |
||
kk714
一般會員 發表:4 回覆:14 積分:3 註冊:2004-11-02 發送簡訊給我 |
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 發送簡訊給我 |
> 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 發送簡訊給我 |
抱欠..我邊做邊發問..問題解決有再修改..
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 發送簡訊給我 |
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 發送簡訊給我 |
如果呼叫出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 發送簡訊給我 |
||
kk714
一般會員 發表:4 回覆:14 積分:3 註冊:2004-11-02 發送簡訊給我 |
是可以開啟另一個exe檔了沒錯…
我是想問是否可以在開啟exe檔後關閉這個偵測版本的程式… 我試過了…他好像沒有自動關閉!^^" 另外程式上面的標題列含放大、縮小、關閉的那列可以隱藏嘛? form可以固定大小嘛? 快完成了!^^"希望大大再指點一番… ===================引 用 文 章=================== 程式執行完畢就自動關閉了啊 ~ ShellExecute 開啟的 exe 程式仍會存在 ===================引 用 文 章=================== 如果呼叫出exe後可以把原來偵測版本的DELPHI程式關閉嘛? ? |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
||
kk714
一般會員 發表:4 回覆:14 積分:3 註冊:2004-11-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |