2017-02-15 21 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