2017-02-15 48 views
1

我是Embarcadero C++的初學者,如果我的應用程序是在Embarcadero C++中開發的並安裝在客戶端機器上,那麼如果新的更新可用,我的應用程序如何通知用戶?如果用戶點擊yes按鈕,那麼它將首先下載應用程序然後安裝它。Embarcadero C++:如果有新的更新可用,如何通知用戶?

如果有人有任何想法,請讓我知道。

+1

[這個問題](http://stackoverflow.com/questions/277514/delphi-how-do-you-auto-update-your-applications)可能會有所幫助。 – 2017-02-15 07:15:42

+0

請給我任何參考....或任何組件幫助我實現這一點clickonce ..等等。對Embarcadero不太瞭解。 –

回答

1

下面是我如何檢查服務器上是否有新版本的程序可用,使用 Indy客戶端組件TIdHTTP

比方說,你已經上傳了一個新版本的應用程序。除了包含應用程序的安裝文件或zip文件外,還需要上傳一行文本文件(applicationBuildData.txt),其中包含構建值(整數),分隔符(;)以及可選的其他數據(版本號,程序名等)。例如:

20170215; ProgamName rel。 1.2。

這是applicationBuildData.txt文件中的唯一行。下面是代碼示例(我修改我原來的代碼位):

void __fastcall TfrmDialog::Button1Click(TObject *Sender) 
{ 
TIdHTTP *IdHTTP1 = new TIdHTTP(this); 
// let's say this is current app build (on user's side) 
int currAppBuild = 20170101; 
int prodBuildNew = 0; 
UnicodeString prodVersionNew; 
UnicodeString version_str; 
    try { 
     // get content of applicationBuildData.txt into string 
     version_str = IdHTTP1->Get("http://www.your-site.com/applicationBuildData.txt"); 
     prodBuildNew = StrToInt(version_str.SubString(1, version_str.Pos(";") - 1).Trim()); 
     prodVersionNew = version_str.SubString(version_str.Pos(";") + 1, 100).Trim(); 
     } 
    catch (...) 
     { 
     prodBuildNew = 0; 
     prodVersionNew = "???"; 
     } 
    if (prodBuildNew == 0) { 
     // ...faild to get data from server... 
     // display message 
     } 
    else if (prodBuildNew > currAppBuild) { 
     // new version is available 
     // display message  
     } 
    else { 
     // application version is up to date 
     // display message 
    } 
delete IdHTTP1;  
} 

在這個例子中,當前版本號更小,然後上傳版本號,它會指示用戶新版本。

注意:currAppBuild通常是一些全局常量,或者是提供構建版本的全局變量。在檢測到服務器上的新版本之後,您可以下載安裝/ zip或僅顯示消息,並讓用戶訪問您的站點並手動下載新版本。

編輯:如何將文件下載到使用TIdHTTP組件本地磁盤,請檢查下面的視頻:

https://www.youtube.com/watch?v=fcN8K3R4iZE