2017-02-15 4 views
1

Я новичок в Embarcadero C++, если мое приложение разработано в Embarcadero C++ и установлено на клиентской машине, то как мое приложение уведомляет пользователя о появлении нового обновления? Если пользователь нажал кнопку «Да», он сначала загрузит приложение, затем установит его.Embarcadero C++: как уведомить пользователя о наличии нового обновления?

Пожалуйста, дайте мне знать, если у кого-нибудь есть Идея.

+1

[Этот вопрос] (http://stackoverflow.com/questions/277514/delphi-how-do-you-auto-update-your-applications) может помочь. –

+0

Пожалуйста, дайте мне любую ссылку .... или любой компонент, который помог мне достичь этого, например, clickonce ..etc. Не знаю много о Embarcadero. –

ответ

1

Вот как я проверяю, доступна ли новая версия программы на сервере, используя Компонент Indy Client TIdHTTP.

Предположим, вы загрузили новую версию своего приложения. Помимо файла установки или zip, содержащего ваше приложение, загрузите текстовый файл с одной строкой (applicationBuildData.txt), который содержит значение сборки (integer), разделитель (;) и, возможно, некоторые другие данные (номер версии, имя программы и т. Д.). Например:

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, либо просто отобразить сообщение и позволить пользователю перейти на ваш сайт и загрузить новую версию вручную.

Edit: Как загрузить файл на локальный диск с помощью TIdHTTP компонента, проверьте следующее видео:

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