Загрузка...

Помогите с кодом

Тема в разделе Программирование создана пользователем BadDays 10 апр 2025. 90 просмотров

Загрузка...
  1. BadDays
    BadDays Автор темы 10 апр 2025 0 27 авг 2021
    Кто знает, как можно реализовать автообновление в скрипте (python)? Я получал файлы из github репозитория, но работает криво(
    def check_for_updates():
    """Проверяет наличие новой версии программы."""
    try:
    response = requests.get(VERSION_URL, timeout=10)
    response.raise_for_status()
    latest_version = response.text.strip()

    if latest_version != CURRENT_VERSION:
    print(f"Доступна новая версия: {latest_version}. Текущая версия: {CURRENT_VERSION}.")
    return True, latest_version
    else:
    print("* Вы используете последнюю версию программы.")
    return False, None
    except requests.RequestException as e:
    print(f"Ошибка при проверке обновлений: {e}")
    return False, None


    def download_new_version():
    """Скачивает новую версию программы."""
    try:
    response = requests.get(UPDATE_URL, stream=True, timeout=30)
    response.raise_for_status()

    # Сохраняем новую версию программы во временный файл
    with open("client_new.exe", "wb") as f:
    for chunk in response.iter_content(chunk_size=8192):
    f.write(chunk)

    print("Новая версия программы успешно скачана.")
    return True
    except requests.RequestException as e:
    print(f"Ошибка при скачивании новой версии: {e}")
    return False


    def replace_with_new_version():
    """Заменяет текущий файл программы на новую версию и перезапускает её."""
    try:
    current_file = sys.argv[0]
    temp_file = current_file + ".new"

    # Перемещаем скачанный файл в временный файл
    shutil.move("client_new.exe", temp_file)

    # Создаём .bat файл для обновления
    bat_file = os.path.join(os.path.dirname(current_file), "update.bat")
    with open(bat_file, "w") as f:
    f.write(f"Echo off\n")
    f.write(f"timeout /t 2 > nul\n") # Ждём 2 секунды
    f.write(f"move /y \"{temp_file}\" \"{current_file}\"\n") # Заменяем файл
    f.write(f"start \"\" \"{current_file}\"\n") # Перезапускаем программу
    f.write(f"del \"%~f0\"\n") # Удаляем .bat файл

    print(f"Файл {bat_file} успешно создан.")

    # Запускаем .bat файл и завершаем текущий процесс
    os.system(f"start {bat_file}")
    sys.exit(0)
    except Exception as e:
    print(f"Ошибка при обновлении программы: {e}")
     
  2. Апатия
    Апатия 10 апр 2025 444 774 15 июн 2021
    ну твой подход выглядит в целом верным, однако подозреваю что виндовс дефендеру могут не понравится такие фокусы с бат файлами
     
  3. Librarian_shop
     
  4. Aisan
    Aisan 10 апр 2025 Ничего не продаю, не создаю. Не пишите мне 14 139 26 авг 2020
    Возьми готовую реализацию из любого +- адекватного проекта, зачем велосипед изобретать?
     
    1. BadDays Автор темы
      спасибо
  5. Апатия
    Апатия 10 апр 2025 444 774 15 июн 2021
    вот я когда то подобное писал, там немного лишнего кода для тебя, но в целом работало хорошо

    Python
    def updateApplication(self, download_url): old_file = argv[0] old_dir = os.path.dirname(old_file) pid = ctypes.windll.kernel32.GetCurrentProcessId() error = False progress_dialog = QProgressDialog(self.translations.get("update_load", ""), None, 0, 100) progress_dialog.setWindowTitle(self.translations.get("update", "")) progress_dialog.setWindowModality(2) progress_dialog.show() try: response = get(download_url, stream=True) total_size_in_bytes = int(response.headers.get('content-length', 0)) block_size = 1024 downloaded_bytes = 0 with open(f'{old_dir}/Stellaris-DLC-Unlocker.load', 'wb') as new_exe: for data in response.iter_content(block_size): new_exe.write(data) downloaded_bytes += len(data) progress = int(downloaded_bytes / total_size_in_bytes * 100) progress_dialog.setValue(progress) with open('updater.bat', 'w') as updater_file: updater_file.write('chcp 1251 > nul\n') updater_file.write('@echo off\n') updater_file.write(f'taskkill /pid {pid} /f\n') updater_file.write(f'ping 127.0.0.1 -n 3 > nul\n') updater_file.write('echo Updating...\n') updater_file.write(f'del "{old_file}"\n') updater_file.write(f'rename "{old_dir}\\file.load" "file.exe"\n') updater_file.write(f'start "" "{old_dir}\\file.exe"\n') updater_file.write('ping 127.0.0.1 -n 2 > nul\n') updater_file.write('del %0') except Exception: if self.ok_dialog(self.translations.get("error", ""), self.translations.get("update_error", ""), QMessageBox.Critical): pass error = True progress_dialog.close() if not error: sleep(0.5) Popen(['cmd.exe', '/c', 'updater.bat'], shell=True) exit()
     
    10 апр 2025 Изменено
  6. Librarian_shop

    --- Сообщение объединено с предыдущим 10 апр 2025

    --- Сообщение объединено с предыдущим 10 апр 2025
     
Top
JavaScript error: