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

Darwin

Команда форума
Администратор
Регистрация
27.04.2022
Сообщения
1 016


Как сделать обновление программы или лоадера на 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); // Делаем выход из программы
}
 
Последнее редактирование:
Вместо запуска сайта откуда скачать новую версию, можете скачать напрямую обновленную версию
изменяйте код как вам нужно либо же оставьте как есть!
 
Вместо запуска сайта откуда скачать новую версию, можете скачать напрямую обновленную версию
изменяйте код как вам нужно либо же оставьте как есть!
а нельзя сделать всё это автономно? Не принимая участье клиента?
 
Спасибо, что поделился.
 
Назад
Верх Низ