У меня есть настольное приложение, написанное на Python с использованием PyQt. Он установлен в Windows 10 и более поздних версиях. Я создаю пакет сборки с помощью cx-Freeze и установщик с помощью Inno Setup. Я не хочу использовать инструмент Advanced Installer, поскольку он дорогостоящий, поэтому я собираюсь выполнить все шаги вручную.
Я написал средство обновления вручную, которое проверяет наличие новых версий и загрузок. последний исполняемый файл с облачного сервера. Однако он не работает на компьютерах пользователей — из-за прав администратора, хотя на моем ПК работает. Не могли бы вы рассказать мне обо всех нюансах, которые мне следует учитывать при создании надежного автоматического средства обновления для моего настольного приложения? Вот код, который я написал для загрузки .exe-файла из облака и его запуска.
def start_update(self):
self.ok_button.setEnabled(False)
threading.Thread(target=self.update_process).start()
def update_process(self):
bucket_name = 'doccyversionbucket2'
key = 'updated_version/doccy_transparent.exe'
local_installer_path = os.path.join(os.path.expanduser('~'), 'Downloads', 'DoccyInstaller.exe')
if self.download_update(bucket_name, key, local_installer_path):
if not self.run_as_admin(local_installer_path):
logger.error("Failed to install the update")
self.update_check_signal.emit(False)
else:
logger.error("Failed to download the update")
self.update_check_signal.emit(False)
def download_update(self, bucket_name, key, save_path):
try:
s3 = session.client('s3')
logger.info(f"Attempting to download update from s3://{bucket_name}/{key} to {save_path}")
s3.download_file(bucket_name, key, save_path)
logger.info("Download completed successfully")
return True
except Exception as e:
logger.error(f"Error downloading update: {e}")
return False
def run_as_admin(self, installer_path):
try:
if self.is_admin():
subprocess.run([installer_path], check=True)
return True
else:
result = ctypes.windll.shell32.ShellExecuteW(None, "runas", installer_path, None, None, 1)
return result > 32
except Exception as e:
logger.error(f"Error running as admin: {e}")
return False
def is_admin(self):
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-python
Реализация Updater для настольного приложения, написанного на Python. ⇐ Python
Программы на Python
1731074838
Anonymous
У меня есть настольное приложение, написанное на Python с использованием PyQt. Он установлен в Windows 10 и более поздних версиях. Я создаю пакет сборки с помощью cx-Freeze и установщик с помощью Inno Setup. Я не хочу использовать инструмент Advanced Installer, поскольку он дорогостоящий, поэтому я собираюсь выполнить все шаги вручную.
Я написал средство обновления вручную, которое проверяет наличие новых версий и загрузок. последний исполняемый файл с облачного сервера. Однако он не работает на компьютерах пользователей — из-за прав администратора, хотя на моем ПК работает. Не могли бы вы рассказать мне обо всех нюансах, которые мне следует учитывать при создании надежного автоматического средства обновления для моего настольного приложения? Вот код, который я написал для загрузки .exe-файла из облака и его запуска.
def start_update(self):
self.ok_button.setEnabled(False)
threading.Thread(target=self.update_process).start()
def update_process(self):
bucket_name = 'doccyversionbucket2'
key = 'updated_version/doccy_transparent.exe'
local_installer_path = os.path.join(os.path.expanduser('~'), 'Downloads', 'DoccyInstaller.exe')
if self.download_update(bucket_name, key, local_installer_path):
if not self.run_as_admin(local_installer_path):
logger.error("Failed to install the update")
self.update_check_signal.emit(False)
else:
logger.error("Failed to download the update")
self.update_check_signal.emit(False)
def download_update(self, bucket_name, key, save_path):
try:
s3 = session.client('s3')
logger.info(f"Attempting to download update from s3://{bucket_name}/{key} to {save_path}")
s3.download_file(bucket_name, key, save_path)
logger.info("Download completed successfully")
return True
except Exception as e:
logger.error(f"Error downloading update: {e}")
return False
def run_as_admin(self, installer_path):
try:
if self.is_admin():
subprocess.run([installer_path], check=True)
return True
else:
result = ctypes.windll.shell32.ShellExecuteW(None, "runas", installer_path, None, None, 1)
return result > 32
except Exception as e:
logger.error(f"Error running as admin: {e}")
return False
def is_admin(self):
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
Подробнее здесь: [url]https://stackoverflow.com/questions/79169450/implementing-updater-for-desktop-application-written-in-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия