Bug 953

Summary: Не удаляется КОМПАС
Product: [Поддержка проектов] КОМПАС 3D Reporter: Виталий Булгаков <bulgakov>
Component: ТестированиеAssignee: Сергей Тимушев <tsergey>
Status: CLOSED FIXED QA Contact: Andrey Vusik <night>
Severity: normal    
Priority: P2 CC: amorozov, baraka, kondratyuk, lav, mais, mx, svzhu, vitperov, vovaz
Version: v10   
Target Milestone: ---   
Hardware: PC   
OS: ALT Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 5157    
Bug Blocks: 753, 3106, 3195, 5101, 5513    

Description Виталий Булгаков 2007-12-14 15:35:30 MSK
Пытаюсь удалить установленный КОМПАС 3D V9SP1 Demo:
1. Удаление приложений Wine (при настройке версии Windows 2000)
2. запуском setup.exe дистрибутива и выбором опции Удалить
Вся файловая структура КОМПАС остается на месте, КОМПАС запускается.
Comment 1 Александр Пликус 2008-09-20 13:46:44 MSD
Проверить на новой сборке и v10
Comment 2 Денис Баранов 2008-09-21 19:59:13 MSD
Подтверждаю на новой сборке. Запускается мастер. Якобы что-то делает, но ничего не происходит.

wine-1.0.9-alt23
wine-etersoft-sql-1.0.9-alt7
libwine-1.0.9-alt23
libwine-gl-1.0.9-alt23
Comment 3 Виталий Перов 2008-10-06 19:39:04 MSD
Судя по логу при удалении, процесс удаления ничем не отличается от восстановления/установки. Могу даже предположить, что если удалить какой-то файл, то при удалении Компаса он будет восстановлен :)

Вообще в msi.dll сейчас довольно плохо обстоят дела с удалением. Думаю эта бага будет решена не скоро
Comment 4 Александр Морозов 2009-08-04 19:36:52 MSD
Очень много раз открывается "/home/username/.wine/dosdevices/c:/" и заканчиваются файловые дескрипторы
Comment 5 Александр Морозов 2009-08-05 14:13:42 MSD
> Очень много раз открывается
> "/home/username/.wine/dosdevices/c:/" и заканчиваются
> файловые дескрипторы

Проблема оказалась регрессом, вызванным воркэраундом для работы блокировок на NFS (ошибка #4046). Патч: server: Do not close file descriptors immediately only for regular files.

Теперь удаление завершается успешно, но ничего не удаляётся (или, может быть, не всё).
Comment 6 Александр Морозов 2009-08-05 16:37:58 MSD
Кстати, достаточно много файлов таки удаляется. Количество файлов в директории Компаса до удаления:
$ find KOMPAS-3D\ V10 -type f | wc -l
2135
После удаления:
$ find KOMPAS-3D\ V10 -type f | wc -l
460

Попробовал удалять с помощью wine msiexec -x KOMPAS-3D_V10.msi. Почти всё удаляется:
$ find KOMPAS-3D\ V10 -type f | wc -l
38
Comment 7 Александр Морозов 2009-08-05 18:26:12 MSD
У файлов, которые не удаляются с помощью msiexec -x, установлены права вида -r--r--r--. Если перед удалением файлов убирать с них атрибут FILE_ATTRIBUTE_READONLY, то с помощью msiexec -x удаляются все файлы. Директории остаются на месте.
Comment 8 Александр Морозов 2009-08-05 18:31:34 MSD
Действие "RemoveFolders" не реализовано.
Comment 9 Александр Морозов 2009-08-07 15:40:36 MSD
Как я понял из документации, действие RemoveFolders нужно только для удаления пустых директорий, создаваемых CreateFolders. Директории, создаваемые для компонентов, должны удаляться и без этого действия.

Сделал тестовый msi-пакет, который устанавливает файл test.txt в директорию Test. В Windows директория при деинсталляции удаляется, а в WINE нет.
Comment 10 Александр Морозов 2009-08-10 20:25:23 MSD
Сделал, чтобы при удалении файлов удалялись директории, которые становятся пустыми. При этом могут удалиться директории из таблицы CreateFolder, которые не должны быть удалены, но они потом создадутся заново при выполнении действия CreateFolders.

Действие CreateFolders в WINE выполнялось всегда, а не только при удалении каких-то компонентов. Сделал, чтобы оно выполнялось только в случае, если никакие компоненты не устанавливаются.

Реализовал действие RemoveFolders. Правда, реализацию нельзя считать полностью корректной. Также, как и в случае CreateFolders, не выполняется покомпонентная проверка директорий: либо удаляются все директории (в случае, когда ни один компонент не устанавливается), либо ничего не удаляется.

При деинсталляции Компас с помощью msiexec -x директории удаляются практически полностью. Остаётся только c:\Program Files\ASCON
Comment 11 Александр Морозов 2009-08-11 16:19:23 MSD
При удалении через значок в "Панели управления Wine" вызывается ControlEvent_Remove. Эта функция устанавливает INSTALLSTATE_ABSENT для всех фич и вызывает ACTION_UpdateComponentStates. Последняя в качестве второго аргумента ожидает имя фичи, но получает "ALL", не находит фичи с таким именем и не устанавливает действия, которые надо произвести с компонентами.
Comment 12 Александр Морозов 2009-08-11 19:21:41 MSD
Если в ControlEvent_Remove вызывать ACTION_UpdateComponentStates для каждой фичи, а не для "ALL", то удаляется заметно больше файлов, но всё же не все.
Comment 13 Александр Морозов 2009-08-13 15:27:22 MSD
После описанного выше изменения при полной установке Компаса стало ставиться больше файлов, чем до этого:
$ find KOMPAS-3D\ V10 -type f | wc -l
4292
И не все из них удаляются даже с помощью msiexec -x
Comment 14 Александр Морозов 2009-08-14 16:17:04 MSD
Добавил сброс настроек перед их установкой в MSI_SetFeatureStates.
Сделал установку соответствующих properties при обработке некоторых control events.

Теперь после деинсталляции остаётся только пустая директория ASCON.
Comment 15 Виталий Перов 2010-03-06 16:53:17 MSK
Откатил патч:

commit 715f1dde9d0fe621cc1e3018841a1215cd799306
Author: Alexander Morozov <amorozov@etersoft.ru>
Date:   Fri Aug 14 16:21:45 2009 +0400

    msi: Implement ACTION_RemoveFolders (eterbug #953).

В свободном wine появилась другая реализация этой функции.

Требуется проверить не проявляется ли бага.

Речь идёт только об eterhack. в релизе 1.0.12 всё по-старому. 
Comment 16 Виталий Перов 2010-03-07 13:42:48 MSK
Переделал патч:
commit c3f1f804ec4c9ce23aa52a0a485c04ec374a54c7
Author: Alexander Morozov <amorozov@etersoft.ru>
Date:   Fri Aug 14 16:21:44 2009 +0400

    msi: Remove empty directories after removing files (eterbug #953).


Теперь вместо:
if (!ACTION_VerifyComponentForAction( comp, INSTALLSTATE_ABSENT ))

Надо выполнять:
if (comp->ActionRequest != INSTALLSTATE_LOCAL)
Comment 17 Илья Шпигорь 2010-12-28 14:54:52 MSK
В eterhack пришлось откатить 2 патча по этой баге:

commit cfadf40968cb492ac906920ecf996df7856ea466
Author: Alexander Morozov <amorozov@etersoft.ru>
Date:   Fri Aug 14 16:21:46 2009 +0400

    msi: Do not call ACTION_UpdateComponentStates with "ALL" as a second argument (eterbug #953).


commit 30070a72ed3d1129b3e216db7b6b737d119da323
Author: Alexander Morozov <amorozov@etersoft.ru>
Date:   Wed Oct 20 15:12:23 2010 +0400

    msi: Set properties in some control events handlers (eterbug #953).

    Conflicts:

        dlls/msi/events.c
Comment 18 Денис Баранов 2011-01-05 19:17:07 MSK
Откладываю до работ над 2.0.
Comment 19 Виталий Перов 2011-03-22 17:31:44 MSK
Откатил патч:

commit 3c757b39b968130ee535a5a4b6d6fac975281964
Author: Alexander Morozov <amorozov@etersoft.ru>
Date:   Wed Mar 10 14:39:26 2010 +0300

    msi: Remove read-only files (eterbug #953).

В оригинальном wine перед удалением выставляются атрибуты без всякой проверки.
Можно попробовать отправить наш патч в winehq, или забыть про него, т.к сейчас всё должно работать.
Comment 20 Svetlana Zhukova 2011-06-03 13:52:29 MSK
Попыталась проверить на машине kompas. Запускаю  setup.exe, выбираю удалить - в окошке появляется надпись о наличии свободного места и программа зависает намертво.Создана бага 7343
Comment 21 Svetlana Zhukova 2011-06-03 14:00:53 MSK
А нет, дождалась.Несколько минут окно программы не подавало признаков работы...висело,не реагировало на клики, но прошло несколько минут, и появилось сообщение - программа удалена!Действительно в каталоге установки компаса стало пусто.Пока закрываю.
Comment 22 Александр Морозов 2011-07-21 21:45:44 MSK
Отправил в рассылку патч, откатывающий "msi: Remove empty directories after removing files (eterbug #953) (new version).", так как:
1) проблему с удалением пустых директорий он сейчас не решает (или решает не полностью). Проверял на текущем eterhack (d69d9bb8ca06c70ed44a449ef6050513eb540d14) и дистрибутиве из /var/ftp/pvt/Windows/CAD - 3D/Kompas/DVD_KOMPAS-3D_V10/KOMPAS-3D_V10/KOMPAS-3D;
2) в текущем виде он приводит к неудачному завершению установки КриптоПро CSP 3.6. Можно, конечно, его подправить, чтобы он этой проблемы не вызывал, но так как толку от него всё равно нет, то лучше откатить.
Comment 23 Vitaly Lipatov 2013-04-05 16:37:22 MSK
Нужно проверить на той версии КОМПАС, которую проверяли на установку.
Описать воспроизведение проблемы, если она выявится, и передать на исправление.
Comment 24 Сергей Тимушев 2013-04-08 14:57:55 MSK
$ swine 2.1 bugs/9107
Удалил компас через 
$ wine uninstaller

Удалял сначала конфигурации, потом сам компас. запускались мастера установки от компас. Компас удалился но осталось несколько папок и файлов, но это уже мелочи. сам компас удалился
Comment 25 Vitaly Lipatov 2014-09-11 18:37:05 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.