Compare commits

...

21 Commits

Author SHA1 Message Date
Sergey Palcheh
7113d864be added the Open Prefix folder button in the file manager 2025-10-03 14:23:48 +06:00
Sergey Palcheh
ad775e4644 added the Delete all WineHelper data button 2025-10-02 15:45:24 +06:00
Sergey Palcheh
36f5c306c5 remove-all: added removal of /home/minergenon/winehelper_backup_log 2025-10-02 14:51:37 +06:00
Sergey Palcheh
173a7ae41f README: added a description of creating a log and backup 2025-10-02 14:38:58 +06:00
Sergey Palcheh
32e56879f7 fixed the appearance of the Open folder with the prefix's log/backup button 2025-10-02 13:54:49 +06:00
Sergey Palcheh
b88ea9f478 the Open folder with the log button has been renamed to Open folder with the log/backup prefix 2025-10-02 13:41:59 +06:00
Sergey Palcheh
dd82cee5ea the backup copy of the prefix has been moved to the home directory 2025-10-02 13:22:54 +06:00
Sergey Palcheh
a35efc347d added a button to open the location of the log file 2025-10-02 12:59:07 +06:00
Sergey Palcheh
95a8d370ab winehelper.log moved to the winehelper_backup_log directory 2025-10-02 12:24:21 +06:00
Mikhail Tergoev
dd2901c85e updated changelog to 0.6.0 2025-10-01 16:36:52 +03:00
Mikhail Tergoev
9f28363ac2 updated tflex_pfx_x64_v03 2025-10-01 15:54:09 +03:00
Mikhail Tergoev
756c9e6d9e fixed PROG_NAME for t-flex-*-manual 2025-10-01 15:32:54 +03:00
Mikhail Tergoev
663cd10a5f Merge branch 'minergenon-readme' 2025-10-01 15:29:51 +03:00
Mikhail Tergoev
86beb9eaee fixed WH_ICON_PATH 2025-10-01 15:29:06 +03:00
Mikhail Tergoev
4610f6a6da updated scripts and prefix for t-flex 2025-10-01 15:25:55 +03:00
Mikhail Tergoev
4563d5641f disabled print_license_agreement to enumerate scripts 2025-10-01 13:57:49 +03:00
17a8f3c63d fixed typos of line breaks 2025-10-01 08:49:19 +00:00
Sergey Palcheh
08ef246712 fixed typos 2025-10-01 14:27:45 +06:00
Sergey Palcheh
07e220794d added a minimal GUI description 2025-10-01 11:11:36 +06:00
Sergey Palcheh
15432ace98 added the initial GUI description 2025-09-30 16:00:33 +06:00
Sergey Palcheh
e04a59507b initial README.md 2025-09-30 13:49:47 +06:00
28 changed files with 591 additions and 64 deletions

View File

@@ -1,5 +1,22 @@
История изменений:
0.6.0
* обновлен графический режим Qt5
* добавлен иконка в трее для графического режима Qt5
* обновлены скрипты установки для t-flex-*
* обновлен скрипт установки для scadoffice
* добавлена ручная установка NetTest (демо версия)
* добавлены скрипты установки ARM-KT:
winehelper install arm-kt-att - "АРМ КТ ПРОФ АТТЕСТАТ"
winehelper install arm-kt-dpp - "АРМ КТ ПРОФ ДПП"
winehelper install arm-kt-es - "АРМ КТ ПРОФ НШ"
winehelper install arm-kt-med - "АРМ КТ ПРОФ МЕД"
winehelper install arm-kt-prof - "АРМ КТ ПРОФ ПРОФЕССИЯ"
winehelper install arm-kt-spo - "АРМ КТ ПРОФ СПО"
winehelper install arm-kt-vuz - "АРМ КТ ПРОФ ВУЗ"
* winehelper killal - убивает только процессы запущенные в WinwHelper
* другие небольшие улучшения и оптимизации скриптов
0.5.4:
* обновлен графический режим Qt5:
- добавлена возможность установки системных зависимостей

371
README.md Normal file
View File

@@ -0,0 +1,371 @@
<div align="center">
<img src="image/gui/winehelper.svg" width="64">
<h1 align="center">WineHelper</h1>
<p align="center">Инструмент для упрощения установки Windows-приложений на Linux. Он использует подготовленные скрипты, портативные версии Wine и изолированные префиксы, обеспечивая максимальную идентичность на различных операционных системах основанных на Alt Linux, начиная с релиза p10 и выше.</p>
</div>
<p align="center">
<img src="image/handbook/auto_install.png" alt="WineHelper GUI" width="80%">
</p>
## Основные возможности
* **Простая установка**: Устанавливайте Windows-приложения с помощью готовых скриптов, как в автоматическом, так и в ручном режиме.
* **Изолированные окружения**: Каждое приложение устанавливается в свой собственный, изолированный префикс, что предотвращает конфликты.
* **Управление версиями Wine**: Легко переключайтесь между различными версиями Wine и Proton для достижения наилучшей совместимости.
* **Графический и консольный интерфейсы**: Используйте удобный GUI для повседневных задач или мощный CLI для автоматизации.
* **Резервное копирование**: Создавайте и восстанавливайте полные резервные копии ваших префиксов.
* **Встроенные утилиты**: Быстрый доступ к `winecfg`, `regedit`, `Winetricks` и другим инструментам для каждого префикса.
---
<!-- Описание установки WineHelper-->
<details>
<summary style="font-size: 35px; font-weight: bold;">Установка</summary>
```
$ su -
# apt-get update && apt-get dist-upgrade
# apt-get install winehelper
# exit
```
</details>
<!-- Описание использования CLI -->
<details>
<summary style="font-size: 35px; font-weight: bold;">Использование WineHelper (CLI)</summary>
### Список приложений для установки
Вывод списка приложений, доступных к установке:
```
$ winehelper install list
```
или сокращенная команда:
```
$ winehelper -i
```
### Запуск установки приложений
Скрипты установки разделены на два типа:
1. **Список программ с возможностью автоматической установки** — содержит полностью автоматизированные скрипты установок программ у которыx есть дистрибутивы (установщики) в свободном доступе.
Процесс полностью автоматизирован.
Пример:
```
$ winehelper install spravki-bk
```
или сокращенная команда:
```
$ winehelper -i spravki-bk
```
2. **Список программ с возможностью установки из существующего дистрибутива** — содержит скрипты установок для программ, которых нет в свободном доступе.
Пример:
```
$ winehelper install is-record-station "/путь/до/установочногоайла"
```
или сокращенная команда:
```
$ winehelper -i is-record-station "/путь/до/установочногоайла"
```
### Процесс установки приложений
При первом запуске **WineHelper** проверяются и при необходимости устанавливаются дополнительные зависимости (запрашиваются права root).
Процесс установки приложений:
1. Отображаются лицензионные соглашения на сторонние компоненты. Для продолжения введите **y** и нажмите **Enter**.
2. Далее процесс проходит автоматически с подробным выводом в терминал:
- Загрузка и проверка хэш-суммы нужной версии Wine.
- Загрузка и проверка хэш-суммы базового префикса.
- Инициализация и подготовка префикса.
- Скачивание дистрибутива (установщика) программы с официального сайта (если применимо).
- Установка приложения.
- Создание .desktop-файла (ярлыка) на рабочем столе и в меню приложений.
Если устанавливаемое приложение требует дополнительных действий от пользователя (ввод лицензии, настройка), это будет явно указано в терминале.
### Удаление префикса с приложением
Для удаления префикса выполните команду:
```
$ winehelper remove-prefix [имя_префикса]
```
Если имя префикса не указано, будет выведен список существующих префиксов:
```
0 - Отмена
1 - Префикс1
2 - Префикс2
Выберите префикс (0-2):
```
Необходимо указать номер удаляемого префикса и нажать клавишу **Enter**.Далее потребуется подтвердить удаление префикса вводом **y**.
В результате будут удалены:
- сам префикс;
- установленное ПО;
- desktop-файлы (ярлыки для установленного ПО в префиксе).
###
Команда создания резервной копии префикса:
```
$ winehelper backup-prefix [имя_префикса]
```
Если имя префикса не указано, будет выведен список существующих префиксов:
```
0 - Отмена
1 - Префикс1
2 - Префикс2
Выберите префикс (0-2):
```
Необходимо указать номер удаляемого префикса и нажать клавишу **Enter**.
После выбора префикса автоматически:
- Создаётся копия префикса.
- Внутри префикса сохраняется используемая версия WINE.
- Копируются иконки для ярлыков (.desktop-файлов).
- Сохраняется информация о ярлыках (.desktop-файлах) для будущей распаковки/восстановления префикса.
- Резервная копия сохраняется на рабочем столе с именем: {{path|backup_имя_префиксаата_создания.whpack}}
### Восстановление префикса из резервной копии
Команда восстановления префикса из резервной копии:
```
$ winehelper restore-prefix "путь/до/файла.whpack"
```
Восстановление префикса не требует подключение к интернету и происходит в автоматическом режиме:
- Распаковка префикса.
- Восстановление версии WINE.
- Восстановление ярлыков (.desktop-файdлов).
После завершения восстановления приложение будет доступно для запуска через меню или рабочий стол.
### Использование команд WINE в WineHelper
WineHelper предоставляет доступ к основным инструментам WINE:
```
winehelper winefile # запуск файлового менеджера wine
winehelper winecfg # запуск wine конфигуратора для префикса
winehelper winereg # запуск редактора реестра для префикса
winehelper wineconsole # запуск терминала wine (cmd.exe)
winehelper winetricks # запуск графического интерфейса winetricks
winehelper winetricks [компонент] # автоматическая установка дополнительного компонента в префикс
```
После выполнения любой из вышеперечисленных команд отображается список существующих префиксов:
```
0 - Отмена
1 - Префикс1
2 - Префикс2
Выберите префикс (0-2):
```
Команда выполняется в выбранном вами префиксе.
### Запуск стороннего *.exe файла в WineHelper
Есть два варианта:
1. В командной строке выполнить команду:
```
$ winehelper "путь/до/файла.exe"
0 - Отмена
1 - Префикс1
2 - Префикс2
Выберите префикс (0-2):
```
Файл будет запущен в выбранном префиксе.
2. С помощью файлового менеджера WINE:'''
```
$ winehelper winefile
0 - Отмена
1 - Префикс1
2 - Префикс2
Выберите префикс (0-2):
```
В файловом менеджере найти и запустить нужный exe-файл.
### Дополнительные команды
```
$ winehelper help
```
Вывод:
<pre>
Использование: winehelper [команда]
Команды:
install list список возможных установочных скриптов
install [скрипт] запустить скрипт установки программы
install [скрипт] --clear-pfx не использовать готовый префикс для установки ПО
install-dxvk [версия|none|list] установить, удалить или показать версии DXVK
install-vkd3d [версия|none|list] установить, удалить или показать версии VKD3D
change-wine [версия] изменить версию Wine/Proton для текущего префикса
installed список установленных программ
run [программа] запуск программы (отладка)
remove-all удалить WineHelper и все связанные данные
create-prefix создать префикс
remove-prefix [имя_префикса] удалить префикс и все связанные данные
backup-prefix [имя_префикса] создать резервную копию префикса
restore-prefix \"путь/до/whpack\" восстановить префикс из резервной копии
Параметры:
--help показать эту справку и выйти
--version показать информацию о пакете и его версии
--changelog показать историю изменений
--debug [команда] включить режим логирования работы WINE
</pre>
</details>
<!-- Описание использования GUI -->
<details>
<summary style="font-size: 35px; font-weight: bold;">Использование WineHelper (GUI)</summary>
### Вкладки «Автоматическая установка» и «Ручная установка»
При использовании графического интерфейса списки приложений расположены во вкладках **Автоматическая установка** и **Ручная установка**.
<div align="center">
<img src="image/handbook/auto_install.png">
<p><em>Вкладка "Автоматическая установка"</em></p>
</div>
<div align="center">
<img src="image/handbook/manual_install.png">
<p><em>Вкладка "Ручная установка"</em></p>
</div>
Для поиска нужной программы введите название в поле поиска.
<div align="center">
<img src="image/handbook/search.png">
<p><em>Поле поиска</em></p>
</div>
При выборе программы из списка слева, в правой части окна отображается подробная информация о ней: описание, иконка и ссылка на официальный сайт.
<div align="center">
<img src="image/handbook/info.png">
<p><em>Информация о выбранной программе</em></p>
</div>
Для установки программы нажмите кнопку **Установить**.
Для **ручной установки** дополнительно потребуется указать путь к установочному файлу (`.exe` или `.msi`), который вы скачали самостоятельно.
<div align="center">
<img src="image/handbook/manual_install_1.png">
<p><em>Вкладка "Ручная установка" с указанием пути к дистрибутиву</em></p>
</div>
После нажатия кнопки **Установить** появится окно с лицензионным соглашением. После его принятия начнется процесс установки, который будет подробно логироваться в отдельном окне.
<div align="center">
<img src="image/handbook/license_agreement.png">
<p><em>Окно с лицензионным соглашением</em></p>
</div>
<div align="center">
<img src="image/handbook/log.png">
<p><em>Окно установки с логом</em></м</em></p>
</div>
После установки приложения и нажатия кнопки **Закрыть** в окне установки приложения, ярлык приложения появится в списке установленных приложений во вкладке **Установленные** а также в меню приложений и на рабочем столе если это разрешено в рабочем окружении.
### Вкладка «Установленные»
На этой вкладке отображаются все приложения, которые были установлены с помощью WineHelper.
<div align="center">
<img src="image/handbook/installed.png">
<p><em>Вкладка "Установленные"</em></p>
</div>
При выборе приложения в правой панели становятся доступны следующие действия:
* **Запустить/Остановить**: Запускает или останавливает/закрывает выбранное приложение.
* **Создать лог запуска программы**: Запускает приложение в режиме отладки. После закрытия приложения в вашем домашнем каталоге будет создан файл `winehelper.log`.
* **Создать резервную копию префикса**: Создает полный бэкап префикса приложения (включая версию Wine) в формате `.whpack` на вашем рабочем столе если это разрешено в рабочем окружении.
* **Удалить префикс**: Полностью удаляет приложение вместе с его префиксом и всеми связанными ярлыками.
Также на этой вкладке доступна кнопка **«Восстановить префикс из резервной копии»**, которая позволяет восстановить любое приложение из ранее созданного `.whpack` файла.
<div align="center">
<img src="image/handbook/election_installed.png">
<p><em>Выбранное приложение во вкладке "Установленные"</em></p>
</div>
Расположения лога запуска программы а также резервной копии префикса можно просмотреть с помощью кнопки **«Открыть папку с логом/резервной копией префикса»** которая появляется автоматически после создания лога или резервной копии.
<div align="center">
<img src="image/handbook/folder_log_backup.png">
<p><em>Кнопка "Открыть папку с логом/резервной копией префикса"</em></p>
</div>
### Вкладка «Менеджер префиксов»
Эта вкладка предоставляет мощные инструменты для управления префиксами Wine.
<div align="center">
<img src="image/handbook/prefix_manager.png">
<p><em>Вкладка "Менеджер префиксов"</em></p>
</div>
#### Создание нового префикса
Нажав кнопку **«Создать новый префикс»**, вы откроете диалог, где можно задать:
* **Имя префикса**.
* **Разрядность** (32-bit или 64-bit).
* **Наполнение** (чистый префикс или с рекомендуемыми библиотеками).
* **Версию Wine/Proton** из доступного списка.
<div align="center">
<img src="image/handbook/create_prefix.png">
<p><em>Диалог создания нового префикса</em></p>
</div>
#### Управление существующим префиксом
Выбрав префикс из выпадающего списка, вы получаете доступ к панели управления, которая позволяет:
* **Запускать стандартные утилиты Wine**:
* `Редактор настроек (winecfg)`
* `Редактор реестра (regedit)`
* `Удаление программ (uninstaller)`
* `Командная строка (cmd)`
* `Файловый менеджер (winefile)`
* **Управлять компонентами**:
* **Менеджер компонентов (Winetricks)**: Удобный интерфейс для установки и переустановки библиотек, шрифтов и настроек.
* **Управление Wine/Proton**: Смена версии Wine или Proton для выбранного префикса.
* **Управление DXVK/VKD3D**: Установка или удаление конкретных версий DXVK и VKD3D.
* **Ассоциации файлов**: Настройка открытия определенных типов файлов (например, `.pdf`, `.docx`) нативными приложениями Linux.
* **Включать/выключать ESync и FSync**.
* **Устанавливать приложения**: Установить любой `.exe` или `.msi` файл напрямую в выбранный префикс.
* **Создавать ярлыки**: Создать ярлык для любого исполняемого файла внутри префикса.
* **Удалять префикс** или **создавать из него шаблон**.
Справа отображается подробная информация о конфигурации выбранного префикса.
### Вкладка «Справка»
Содержит полезную информацию о проекте:
* **Руководство**: Ссылка на официальную документацию.
* **Авторы**: Список разработчиков и участников проекта.
* **Лицензия**: Текст лицензии WineHelper и информация о сторонних компонентах.
* **История изменений**: Changelog пакета.
<div align="center">
<img src="image/handbook/help.png">
<p><em>Вкладка "Справка"</em></p>
</div>
</details>
### Примечание
> [!WARNING]
> Проект находится на стадии WIP (work in progress)

View File

@@ -5,7 +5,7 @@ export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX CAD Учебная Версия 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
@@ -14,7 +14,7 @@ export WH_USE_MESA_GL_OVERRIDE="1"
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad17.whdb"
source "$WH_DB_DIR/t-flex-cad.whdb"
# Программа T-FLEX CAD Учебная Версия
export AUTOINSTALL_ZIP="${WH_TMP_DIR}/TFCAD_ST_17x64_PACK.zip"

View File

@@ -5,7 +5,7 @@ export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX CAD 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
@@ -14,7 +14,7 @@ export WH_USE_MESA_GL_OVERRIDE="1"
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad17.whdb"
source "$WH_DB_DIR/t-flex-cad.whdb"
# Программа T-FLEX CAD
export AUTOINSTALL_ZIP="${WH_TMP_DIR}/T-FLEX CAD 17.zip"

View File

@@ -6,7 +6,7 @@ export PROG_NAME="Приложения для T-FLEX CAD 17"
export PROG_ICON="tflexcad"
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WINEPREFIX="tflex"
export WH_XDG_OPEN="log"

View File

@@ -6,7 +6,7 @@ export PROG_NAME="Ресурсы для T-FLEX CAD 17"
export PROG_ICON="tflexcad"
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WINEPREFIX="tflex"
export WH_XDG_OPEN="log"

View File

@@ -5,7 +5,7 @@ export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX CAD 2D+ 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
@@ -14,7 +14,7 @@ export WH_USE_MESA_GL_OVERRIDE="1"
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad17.whdb"
source "$WH_DB_DIR/t-flex-cad.whdb"
# Программа T-FLEX CAD 2D+ 17
export AUTOINSTALL_ZIP="${WH_TMP_DIR}/T-FLEX CAD 2D+ 17.zip"

View File

@@ -5,7 +5,7 @@ export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX DOCs 17"
export PROG_ICON="tflexdoc"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
@@ -14,7 +14,7 @@ export WH_USE_MESA_GL_OVERRIDE="1"
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad17.whdb"
source "$WH_DB_DIR/t-flex-cad.whdb"
# Программа T-FLEX DOC
AUTOINSTALL_ZIP="${WH_TMP_DIR}/T-FLEX DOCs 17 Client.zip"

View File

@@ -5,7 +5,7 @@ export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX Viewer 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
@@ -14,7 +14,7 @@ export WH_USE_MESA_GL_OVERRIDE="1"
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad17.whdb"
source "$WH_DB_DIR/t-flex-cad.whdb"
# Программа T-FLEX Viewer
export AUTOINSTALL_ZIP="${WH_TMP_DIR}/T-FLEX Viewer 17.zip"

View File

@@ -1,28 +1,24 @@
#!/usr/bin/env bash
# info_ru: Компоненты сервисов поддержки T-FLEX 17
# info_ru: Компоненты сервисов поддержки T-FLEX 17 и 18
########################################################################
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WINEPREFIX="tflex"
export PROG_VERSION=""
export WH_XDG_OPEN="log"
export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 vcrun2022 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei"
export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 dotnet20 vcrun2019 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei"
export WH_USE_MESA_GL_OVERRIDE="1"
# Компоненты поддержки T-FLEX PLM (Linux)
GRDCONTROL_VER="4.3.0-0"
AUTOINSTALL_ZIP_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_Linux.zip"
AUTOINSTALL_DIR_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_Linux"
AUTOINSTALL_REG_LIN="$AUTOINSTALL_DIR_LIN/Components/fake_hasp.reg"
# Компоненты поддержки T-FLEX PLM (Windows)
AUTOINSTALL_ZIP_WIN="$WH_TMP_DIR/T-FLEX 17 Prerequisites.zip"
AUTOINSTALL_DIR_WIN="$WH_TMP_DIR/Компоненты поддержки T-FLEX 17"
AUTOINSTALL_EXE_WIN1="$AUTOINSTALL_DIR_WIN/Access Database Engine 2007/AccessDatabaseEngine.exe"
AUTOINSTALL_EXE_WIN_MSI="$AUTOINSTALL_DIR_WIN/Access Database Engine 2007"
AUTOINSTALL_EXE_WIN2="$AUTOINSTALL_DIR_WIN/TSC2/Setup_TSC2.msi"
AUTOINSTALL_EXE_ADE2007="$AUTOINSTALL_DIR_LIN/Components/AccessDatabaseEngine.exe"
AUTOINSTALL_EXE_TSC2="$AUTOINSTALL_DIR_LIN/Components/Setup_TSC2.msi"
AUTOINSTALL_EXE_VC_X86="$AUTOINSTALL_DIR_LIN/Components/vc_redist.x86.exe"
AUTOINSTALL_EXE_VC_X64="$AUTOINSTALL_DIR_LIN/Components/vc_redist.x64.exe"
prepair_wine
@@ -42,11 +38,8 @@ else
|| ! systemctl list-units --type service --state running | grep hasplmd \
|| ! rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then
# Компоненты поддержки T-FLEX PLM (Linux)
if try_download "https://www.tflex.ru/downloads/Prerequisites_T-FLEX_Linux.zip" "${AUTOINSTALL_ZIP_LIN}" ; then
unpack "$AUTOINSTALL_ZIP_LIN" "$AUTOINSTALL_DIR_LIN"
"$WINELOADER" regedit "$AUTOINSTALL_REG_LIN"
fi
try_download "https://www.tflex.ru/downloads/Prerequisites_T-FLEX_Linux.zip" "${AUTOINSTALL_ZIP_LIN}"
unpack "$AUTOINSTALL_ZIP_LIN" "$AUTOINSTALL_DIR_LIN"
if rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then print_info "grdcontrol-$GRDCONTROL_VER уже установлен в системе."
@@ -55,14 +48,14 @@ else
if [[ "$BASE_PFX" == "none" ]] ; then
print_info "Запускаем подготовку префикса."
# Компоненты поддержки T-FLEX PLM (Windows)
if try_download "https://www.tflex.ru/downloads/T-FLEX%2017%20Prerequisites.zip" "${AUTOINSTALL_ZIP_WIN}" ; then
unpack "$AUTOINSTALL_ZIP_WIN" "$WH_TMP_DIR"
unpack "$AUTOINSTALL_EXE_WIN1" "$AUTOINSTALL_EXE_WIN_MSI"
wine_run_install "$AUTOINSTALL_EXE_WIN_MSI/AceRedist.msi" /q
wine_run_install "$AUTOINSTALL_EXE_WIN2" /q
fi
unpack "$AUTOINSTALL_EXE_ADE2007" "$AUTOINSTALL_DIR_LIN/ADE2007"
wine_run_install "$AUTOINSTALL_DIR_LIN/ADE2007/AceRedist.msi" /q
wine_run_install "$AUTOINSTALL_EXE_VC_X86" /quiet
wine_run_install "$AUTOINSTALL_EXE_VC_X64" /quiet
wine_run_install "$AUTOINSTALL_EXE_TSC2" /q
rm -fR "$DRIVE_C/Program Files/Common Files/System"
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
@@ -74,9 +67,9 @@ else
mv -f "$AUTOINSTALL_DIR_LIN/Components/Windows/System32/"*.dll \
"$DRIVE_C/windows/system32"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/fake_hasp.reg"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/ado-32.reg"
"$WINELOADER"64 regedit "$AUTOINSTALL_DIR_LIN/Components/ado-64.reg"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/tflex.reg"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/ado-64.reg"
fi
if systemctl list-units --type service --state running | grep aksusbd \
@@ -98,14 +91,12 @@ else
fi
try_remove_dir "$AUTOINSTALL_DIR_LIN"
try_remove_dir "$AUTOINSTALL_DIR_WIN"
if [[ $TFLEX_ERROR == "1" ]] ; then
fatal "Произошла ошибка во время подготовки префикса, или установки компонентов ПО."
else
echo "t-flex-cad-prepair" >> "$WINEPREFIX/winetricks.log"
try_remove_file "$AUTOINSTALL_ZIP_LIN"
try_remove_file "$AUTOINSTALL_ZIP_WIN"
# try_remove_file "$AUTOINSTALL_ZIP_LIN"
print_info "Подготовка префикса и установка компонентов завершены."
fi
fi

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
image/handbook/help.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
image/handbook/info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
image/handbook/log.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
image/handbook/search.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
# info_ru: Ручная установка дополнений для T-FLEX DOCS 17 или 18
########################################################################
export PROG_NAME="T-FLEX CAD 17/18"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
export WH_XDG_OPEN="log"
export WH_USE_MESA_GL_OVERRIDE="1"
if [[ -f "$2" ]] ; then
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad.whdb"
wine_run_install "$2"
else
fatal "Не найден файл установки. Перезапустите по примеру:
winehelper install $1 \"/путь/до/файла\""
fi

View File

@@ -1,10 +1,10 @@
#!/usr/bin/env bash
# info_ru: Ручная установка дополнений для T-FLEX CAD 17
# info_ru: Ручная установка дополнений для T-FLEX CAD 17 или 18
########################################################################
export PROG_NAME="T-FLEX CAD 17"
export PROG_NAME="T-FLEX CAD 17/18"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"
export BASE_PFX="tflex_pfx_x64_v03"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WINEPREFIX="tflex"
@@ -14,7 +14,7 @@ export WH_USE_MESA_GL_OVERRIDE="1"
if [[ -f "$2" ]] ; then
# используем общий whdb файл для подготовки префикса и сервисов
# prepair_wine используется из файла настроек
source "$WH_DB_DIR/t-flex-cad17.whdb"
source "$WH_DB_DIR/t-flex-cad.whdb"
wine_run_install "$2"
else

View File

@@ -171,13 +171,9 @@ d62225f6a23e49355a59a2bd9a495390694bd70d4be6d6527cfb7fb2e2d65f0d defpfx_x64_v01
# create with wine_x_tkg_10-0_amd64 (universal user: xuser and isolate_home by default)
# winetricks msxml3 msxml4 msxml6 andale arial comicsans courier georgia impact times trebuchet verdana webdings corefonts wsh57 vcrun6 gdiplus lucida tahoma ucrtbase2019 vcrun2019 dotnet40 dotnet48 dotnet20sp2 d3dcompiler_47
f4cb2f380ad8887f334c6eb3c272b343ae8de327764945266e9e74f8acbac69f tflex17_pfx_x64_v01.tar.xz
# create with wine_x_tkg_10-0_amd64 (universal user: xuser)
# winetricks isolate_home msxml6 ipamona opensymbol wenquanyi ucrtbase2019 uff unifont droid wenquanyizenhei remove_mono internal dotnet40 dotnet48 dotnet20sp2 eufonts takao d3dcompiler_47 fontsmooth=rgb vcrun2022 vlgothic andale arial comicsans courier georgia impact times trebuchet verdana webdings corefonts liberation sourcehansans baekmuk tahoma lucida
be09f25bb795c5f912fad2d122c68c8aed937821255f161c2d75a4773d11a044 tflex17_pfx_x64_v02.tar.xz
68ad589a3e6d8a845c2e3bd4c2672cf97982b3fea0ca4b4f2fb6da126d8b3075 tflex_pfx_x64_v03.tar.xz
# create with wine_wh_tflex_10-9_amd64
# winetricks isolate_home msxml6 ipamona opensymbol wenquanyi ucrtbase2019 uff unifont droid wenquanyizenhei remove_mono internal dotnet40 dotnet48 dotnet20 eufonts takao d3dcompiler_47 fontsmooth=rgb vcrun2022 vlgothic andale arial comicsans courier georgia impact times trebuchet verdana webdings corefonts liberation sourcehansans baekmuk tahoma lucida
# winetricks isolate_home msxml6 ipamona opensymbol wenquanyi ucrtbase2019 uff unifont droid wenquanyizenhei internal dotnet48 dotnet20 eufonts takao d3dcompiler_47 fontsmooth=rgb vcrun2019 vlgothic andale arial comicsans courier georgia impact times trebuchet verdana webdings corefonts liberation sourcehansans baekmuk tahoma lucida t-flex-cad-prepair
7edbd69b40b8ca3fb3594933c6cd37030180c494c08fd13cbd1a5b46565d65e6 ved_ctm_pfx_x86_v03.tar.xz
# create with wine_x_tkg_10-0_amd64 (universal user: xuser)

View File

@@ -16,7 +16,7 @@ if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
USER_WORK_PATH="$HOME/.local/share/$SCRIPT_NAME"
RUN_SCRIPT="/usr/bin/$SCRIPT_NAME"
DATA_PATH="/usr/share/$SCRIPT_NAME"
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg"
WH_ICON_PATH="/usr/share/icons/hicolor/scalable/apps/winehelper.svg"
CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG"
LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE"
AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT"
@@ -102,7 +102,9 @@ else
fi
if [[ $WINEDEBUG != "-all" ]] ; then
export LOG_FILE="$HOME/winehelper.log"
log_dir="$HOME/winehelper_backup_log"
mkdir -p "$log_dir"
export LOG_FILE="$log_dir/winehelper.log"
date > "$LOG_FILE"
print_warning "Включен режим логирования работы WINE."
print_warning "Лог будет сохранен по пути: $LOG_FILE"
@@ -1423,12 +1425,6 @@ wine_run_install () {
}
run_autoinstall () {
if [[ $WH_USE_GUI == "1" ]] \
&& [[ $(ps -o command= -p "$PPID" | awk '{print $2}') =~ "$DATA_PATH/winehelper_gui.py" ]]
then print_ok "Соглашения приняты из графического интерфейса."
else print_license_agreement
fi
if [[ $1 == "--clear-pfx" ]] ; then
export CLEAR_PREFIX="1"
shift
@@ -1484,6 +1480,11 @@ run_autoinstall () {
echo
list_install_scripts "$WH_MANUALINSTALL_DIR" "Список программ с возможностью установки из существующего дистрибутива:"
elif [[ "$INSTALL_SCRIPT" != "0" ]] ; then
if [[ $WH_USE_GUI == "1" ]] \
&& [[ $(ps -o command= -p "$PPID" | awk '{print $2}') =~ "$DATA_PATH/winehelper_gui.py" ]]
then print_ok "Соглашения приняты из графического интерфейса."
else print_license_agreement
fi
source "$INSTALL_SCRIPT" "$@"
print_info "Завершена установка $INSTALL_SCRIPT_NAME"
else
@@ -1774,6 +1775,7 @@ remove_winehelper () {
echo " - Все настройки WineHelper"
echo " - Все приложения/программы, установленные через WineHelper"
echo " - Все ярлыки из меню и с рабочего стола, созданные с помощью WineHelper"
echo " - Все резервные копии и логи, созданные WineHelper"
echo "======================================================"
if print_confirmation "Продолжить?" ; then
echo "----------------------------------------------"
@@ -1789,6 +1791,7 @@ remove_winehelper () {
# Удаление рабочих каталогов
try_remove_dir "$USER_WORK_PATH"
try_remove_dir "$HOME/winehelper_backup_log"
# Удаление файлов меню
try_remove_dir "$WH_MENU_DIR"
@@ -1867,7 +1870,8 @@ backup_prefix() {
check_prefix_var
local backup_base_dir backup_archive_name backup_dest_path temp_backup_dir temp_prefix_dir temp_users_dir
backup_base_dir="$(xdg-user-dir DESKTOP)"
backup_base_dir="$HOME/winehelper_backup_log"
create_new_dir "$backup_base_dir"
backup_archive_name="backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S).whpack"
backup_dest_path="$backup_base_dir/$backup_archive_name"
temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S)"

View File

@@ -1762,6 +1762,7 @@ class WineHelperGUI(QMainWindow):
if show_global:
self.backup_button.setVisible(False)
self.create_log_button.setVisible(False)
self.open_log_dir_button.setVisible(False)
self.uninstall_button.setVisible(False)
self.current_selected_app = None
@@ -1877,6 +1878,12 @@ class WineHelperGUI(QMainWindow):
self.backup_button.clicked.connect(self.backup_prefix_for_app)
installed_global_layout.addWidget(self.backup_button)
self.open_log_dir_button = QPushButton("Открыть папку с логом/резервной копией префикса")
self.open_log_dir_button.setIcon(QIcon.fromTheme("folder-open"))
self.open_log_dir_button.clicked.connect(self.open_log_directory)
self.open_log_dir_button.setVisible(False) # Скрыта по умолчанию
installed_global_layout.addWidget(self.open_log_dir_button)
self.uninstall_button = QPushButton("Удалить префикс")
self.uninstall_button.setIcon(QIcon.fromTheme("user-trash"))
self.uninstall_button.clicked.connect(self.uninstall_app)
@@ -2172,6 +2179,13 @@ class WineHelperGUI(QMainWindow):
self.created_prefix_selector.currentIndexChanged.connect(self.on_created_prefix_selected)
selector_layout.addWidget(self.created_prefix_selector, 1)
self.open_prefix_folder_button = QPushButton()
self.open_prefix_folder_button.setIcon(QIcon.fromTheme("folder-open"))
self.open_prefix_folder_button.setToolTip("Открыть папку префикса в файловом менеджере")
self.open_prefix_folder_button.setEnabled(False)
self.open_prefix_folder_button.clicked.connect(self.open_selected_prefix_folder)
selector_layout.addWidget(self.open_prefix_folder_button)
self.create_base_pfx_button = QPushButton()
self.create_base_pfx_button.setIcon(QIcon.fromTheme("document-export"))
self.create_base_pfx_button.setToolTip("Создать шаблон из выбранного префикса (для опытных пользователей)")
@@ -2316,6 +2330,24 @@ class WineHelperGUI(QMainWindow):
management_layout.setColumnStretch(2, 2)
container_layout.addWidget(self.prefix_management_groupbox)
# --- Кнопка полного удаления ---
# Добавляем разделитель и кнопку в основной контейнер управления
container_layout.addSpacing(15)
self.remove_all_button = QPushButton("Удалить все данные WineHelper")
self.remove_all_button.setStyleSheet("""
QPushButton:!disabled {
background-color: #d32f2f;
color: white;
padding: 5px;
}
""")
self.remove_all_button.setMinimumHeight(32)
self.remove_all_button.setFont(QFont('Arial', 10, QFont.Bold))
self.remove_all_button.setToolTip("ВНИМАНИЕ: Удаляет ВСЕ данные WineHelper, включая все префиксы, настройки и ярлыки.")
self.remove_all_button.clicked.connect(self.remove_all_data)
container_layout.addWidget(self.remove_all_button)
layout.addWidget(self.management_container_groupbox)
layout.addStretch()
self.add_tab(self.prefix_tab, "Менеджер префиксов")
@@ -2357,6 +2389,7 @@ class WineHelperGUI(QMainWindow):
prefix_names = []
self.created_prefix_selector.blockSignals(True)
self.remove_all_button.setEnabled(bool(prefix_names))
self.created_prefix_selector.clear()
if prefix_names:
self.created_prefix_selector.addItems(prefix_names)
@@ -2372,7 +2405,9 @@ class WineHelperGUI(QMainWindow):
self.current_managed_prefix_name = None
self._setup_prefix_management_panel(None)
self.delete_prefix_button.setEnabled(False)
self.remove_all_button.setEnabled(False)
self.create_base_pfx_button.setEnabled(False)
self.open_prefix_folder_button.setEnabled(False)
else:
# Прокручиваем к выбранному элементу, чтобы он был виден в списке
self.created_prefix_selector.view().scrollTo(
@@ -2382,7 +2417,9 @@ class WineHelperGUI(QMainWindow):
self.current_managed_prefix_name = prefix_name
self._setup_prefix_management_panel(prefix_name)
self.delete_prefix_button.setEnabled(True)
self.remove_all_button.setEnabled(True)
self.create_base_pfx_button.setEnabled(True)
self.open_prefix_folder_button.setEnabled(True)
def delete_selected_prefix(self):
"""Удаляет префикс, выбранный в выпадающем списке на вкладке 'Менеджер префиксов'."""
@@ -2491,6 +2528,21 @@ class WineHelperGUI(QMainWindow):
self._run_simple_command("create-base-pfx", [prefix_name])
self.command_dialog.exec_()
def open_selected_prefix_folder(self):
"""Открывает папку выбранного префикса в системном файловом менеджере."""
prefix_name = self.current_managed_prefix_name
if not prefix_name:
return
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
if os.path.isdir(prefix_path):
try:
subprocess.Popen(['xdg-open', prefix_path])
except Exception as e:
QMessageBox.warning(self, "Ошибка", f"Не удалось открыть директорию:\n{prefix_path}\n\nОшибка: {e}")
else:
QMessageBox.warning(self, "Ошибка", f"Директория префикса не найдена:\n{prefix_path}")
def _setup_prefix_management_panel(self, prefix_name):
"""Настраивает панель управления префиксом на основе текущего состояния."""
is_prefix_selected = bool(prefix_name)
@@ -3378,6 +3430,7 @@ class WineHelperGUI(QMainWindow):
self.installed_global_action_widget.setVisible(True)
self.backup_button.setVisible(True)
self.create_log_button.setVisible(True)
self.update_open_log_dir_button_visibility()
self.uninstall_button.setVisible(True)
self.manual_install_path_widget.setVisible(False)
@@ -3386,6 +3439,27 @@ class WineHelperGUI(QMainWindow):
self.current_selected_app = None
self.info_panel.setVisible(False)
def update_open_log_dir_button_visibility(self):
"""Проверяет наличие лог-файла или бэкапов и обновляет видимость кнопки."""
log_dir_path = os.path.join(os.path.expanduser("~"), "winehelper_backup_log")
is_visible = False
if os.path.isdir(log_dir_path):
# Кнопка должна быть видна, если директория не пуста.
if os.listdir(log_dir_path):
is_visible = True
self.open_log_dir_button.setVisible(is_visible)
def open_log_directory(self):
"""Открывает директорию с лог-файлами."""
log_dir_path = os.path.join(os.path.expanduser("~"), "winehelper_backup_log")
if os.path.isdir(log_dir_path):
try:
subprocess.Popen(['xdg-open', log_dir_path])
except Exception as e:
QMessageBox.warning(self, "Ошибка", f"Не удалось открыть директорию:\n{log_dir_path}\n\nОшибка: {e}")
else:
QMessageBox.information(self, "Информация", f"Директория с логами не найдена:\n{log_dir_path}")
def _get_prefix_name_for_selected_app(self):
"""Извлекает имя префикса для выбранного приложения."""
if not self.current_selected_app or 'desktop_path' not in self.current_selected_app:
@@ -3426,8 +3500,8 @@ class WineHelperGUI(QMainWindow):
msg_box = QMessageBox(self)
msg_box.setWindowTitle("Создание резервной копии")
msg_box.setText(
f"Будет создана резервная копия префикса '{prefix_name}'.\n"
f"Файл будет сохранен на вашем Рабочем столе в формате .whpack.\n\nПродолжить?"
f"Будет создана резервная копия префикса '{prefix_name}'.\n\n"
f"Файл будет сохранен в домашней директории в папке winehelper_backup_log/ в формате .whpack.\n\nПродолжить?"
)
msg_box.addButton(yes_button, QMessageBox.YesRole)
msg_box.addButton(no_button, QMessageBox.NoRole)
@@ -3460,6 +3534,7 @@ class WineHelperGUI(QMainWindow):
self.command_process.setProcessChannelMode(QProcess.MergedChannels)
self.command_process.readyReadStandardOutput.connect(self._handle_command_output)
self.command_process.finished.connect(self._handle_command_finished)
self.command_process.finished.connect(self.update_open_log_dir_button_visibility)
winehelper_path = self.winehelper_path
args = ["backup-prefix", prefix_name]
@@ -3525,9 +3600,9 @@ class WineHelperGUI(QMainWindow):
msg_box = QMessageBox(self)
msg_box.setWindowTitle("Создание лога")
msg_box.setText(
"Приложение будет запущено в режиме отладки.\n"
"После закрытия приложения лог будет сохранен в вашем домашнем каталоге "
"под именем 'winehelper.log'."
"Приложение будет запущено в режиме отладки.\n\n"
"После закрытия приложения лог будет сохранен в папке 'winehelper_backup_log' "
"в вашем домашнем каталоге под именем 'winehelper.log'."
)
msg_box.addButton(yes_button, QMessageBox.YesRole)
msg_box.addButton(no_button, QMessageBox.NoRole)
@@ -3793,6 +3868,7 @@ class WineHelperGUI(QMainWindow):
# и избегания проблем с замыканием в lambda.
process.finished.connect(partial(self._on_app_process_finished, desktop_path))
process.finished.connect(self.update_open_log_dir_button_visibility)
try:
process.start(program, arguments)
@@ -3811,6 +3887,55 @@ class WineHelperGUI(QMainWindow):
QMessageBox.critical(self, "Ошибка",
f"Не удалось обработать команду запуска:\n{command_str}\n\nОшибка: {str(e)}")
def remove_all_data(self):
"""Запускает процесс полного удаления всех данных WineHelper."""
# Первое подтверждение
msg_box1 = QMessageBox(self)
msg_box1.setIcon(QMessageBox.Critical)
msg_box1.setWindowTitle('Подтверждение полного удаления')
msg_box1.setText(
"<h2>ВНИМАНИЕ!</h2>"
"<p>Это действие полностью и безвозвратно удалит <b>ВСЕ</b> данные, связанные с WineHelper, включая:</p>"
"<ul>"
"<li>Все созданные префиксы и установленные в них программы.</li>"
"<li>Все ярлыки в меню и на рабочем столе.</li>"
"<li>Все настройки, кэш и резервные копии.</li>"
"</ul>"
"<p>Продолжить?</p>"
)
msg_box1.setTextFormat(Qt.RichText)
yes_button1 = msg_box1.addButton("Да, я понимаю", QMessageBox.YesRole)
no_button1 = msg_box1.addButton("Отмена", QMessageBox.NoRole)
msg_box1.setDefaultButton(no_button1)
msg_box1.exec_()
if msg_box1.clickedButton() != yes_button1:
return
# Второе, финальное подтверждение
msg_box2 = QMessageBox(self)
msg_box2.setIcon(QMessageBox.Critical)
msg_box2.setWindowTitle('Последнее предупреждение')
msg_box2.setText("<h3>Вы уверены, что хотите удалить ВСЁ?</h3><p>Это действие необратимо.</p>")
msg_box2.setTextFormat(Qt.RichText)
yes_button2 = msg_box2.addButton("Да, удалить всё", QMessageBox.DestructiveRole)
no_button2 = msg_box2.addButton("Нет, я передумал", QMessageBox.RejectRole)
msg_box2.setDefaultButton(no_button2)
msg_box2.exec_()
if msg_box2.clickedButton() != yes_button2:
return
# Запускаем команду и выходим из приложения
try:
# Запускаем команду в фоне и не ждем ее завершения
subprocess.Popen([self.winehelper_path, "remove-all", "--force"])
# Сообщаем пользователю и закрываем GUI
QMessageBox.information(self, "Удаление", "Запущена процедура удаления WineHelper. Приложение будет закрыто.")
self.quit_application()
except Exception as e:
QMessageBox.critical(self, "Ошибка", f"Не удалось запустить команду удаления: {e}")
def quit_application(self):
"""Инициирует процесс выхода из приложения."""
self.is_quitting = True