Статья Обновление программы или лоадера [C++]

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
389


Как сделать обновление программы или лоадера на C++

В данной статье я вам расскажу как сделать простенькую проверку на обновление вашей программы или лоадера на языке программирования C++
Если вы хотите что бы пользователи скачали последнию версию вашей программы то мы реализуем функцию которая будет проверять на веб части версию клиента и сравнивать ее с клиенской части и если они не схожи то обновлять либо же открыть ссылку на скачивание обновленного лоадера или программы

Для начало мы подклюим директивы для работы с интернетом
#include <WinInet.h>
#pragma comment(lib, "WinInet.lib")

Давайте добавим в коде переменную версий текущей для нашей программы и будем ее проверять через метод DownloadString который будет ниже
string version = "1.0";

Теперь давайте реализуем функцию скачивание строки и замену строк

C++:
string replaceAll(string subject, const string& search, const string& replace) {
    size_t pos = 0;
    while ((pos = subject.find(search, pos)) != string::npos) {
        subject.replace(pos, search.length(), replace);
        pos += replace.length();
    }
    return subject;
}

C++:
string DownloadString(string URL) {
    HINTERNET interwebs = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET urlFile;
    string rtn;
    if (interwebs) {
        urlFile = InternetOpenUrlA(interwebs, URL.c_str(), NULL, NULL, NULL, NULL);
        if (urlFile) {
            char buffer[2000];
            DWORD bytesRead;
            do {
                InternetReadFile(urlFile, buffer, 2000, &bytesRead);
                rtn.append(buffer, bytesRead);
                memset(buffer, 0, 2000);
            } while (bytesRead);
            InternetCloseHandle(interwebs);
            InternetCloseHandle(urlFile);
            string p = replaceAll(rtn, "|n", "\r\n");
            return p;
        }
    }
    InternetCloseHandle(interwebs);
    string p = replaceAll(rtn, "|n", "\r\n");
    return p;
}

Давайте сделаем проверку в начале точки входа нашей программы:
C++:
if(version != DownloadString("Ссылка для чтения текста версий")) { // Если версия не равняется с клиентской части, обновляем
    printf("Programm is outdated, please download a new version");
    Sleep(3000); // Добавляем ожидание 3 секунды что бы пользователь смог прочитать
    system("start https://google.com") // вместо google.com укажите версию откуда скачать новую версию
    exit(0); // Делаем выход из программы
}
 
Последнее редактирование:

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
389
Вместо запуска сайта откуда скачать новую версию, можете скачать напрямую обновленную версию
изменяйте код как вам нужно либо же оставьте как есть!
 

$1and1

Активный
Сообщения
275
Реакции
41
Вместо запуска сайта откуда скачать новую версию, можете скачать напрямую обновленную версию
изменяйте код как вам нужно либо же оставьте как есть!
а нельзя сделать всё это автономно? Не принимая участье клиента?
 

xbai

Новичок
Сообщения
5
Реакции
0
Спасибо, что поделился.
 
Верх Низ