bifido 76
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору mixmar2015 Эх, если бы было все так просто и проблема была бы в каких-то командах скрипта. Тогда можно было бы исправить это на раз два. Но к сожалению это не так. Например, если вы возьмете список всех устаревших Net 4, которые выдает скрипт, а затем просто сами, без всякого скрипта, вручную их удалите, то получите точно такую же картину (нарушение целостности при очистке), как если бы удаление выполнял скрипт. Так как скрипт как раз и выполняет удаление стандартным способом - через дисм (ну, вы это и так видите). Проблема заключается именно в стандартном способе удаления тех обновлений, которые не может удалить стандартная очистка. И в некоторых случаях возникает ситуация, когда после удаления таких обновлений, проверка целостности (RestoreHealth) проходит без проблем, а очистка (StartComponentCleanup) показывает нарушение целостности. Связано это с появившимся в восьмерке механизмом сжатия файлов неиспользуемых компонентов с помощью алгоритма дельта разности, и тем, что в отличие от десятки, восьмерка, до появления накопительных, обновлялась как и семерка. А появившиеся накопительные не заменили все предыдущие обновления. Более того, вероятно механизмы проверки целостности были существенно доработаны и унифицированы на десятке, а на восьмерку просто махнули рукой - как результат RestoreHealth не видит то, что видит StartComponentCleanup. Вы могли заметить, что стандартное удаление обновлений через дисм на восьмерке проходит быстрее чем на семерке, хотя казалось бы, все должно быть как раз наоборот. Ведь на восьмерке для всех компонентов устаревших обновлений, нужно по цепочке рассчитать дельта разность и восстановить в нормальное состояние все предшествующие версии этих компонентов, которые есть в хранилище, что должно занять больше времени для их удаления, чем на семерке, где механизма сжатия с помощью дельта разности просто нет. Но на практике это не так. На семерке все компоненты, которые должны быть удалены помечаются при выполнении стандартного удаления, а затем после перезагрузки, во время простоя система их удаляет. На восьмерке это не так, при стандартном удалении обновление просто помечается как удаляемое, а удаление компонентов и соответственно процедура расчета дельта разности и восстановления в нормальное состояние всех предшествующие версии этих компонентов, полностью передано на откуп стандартной очистке. Вот в этом где-то и зарыта собака, то есть удаление выполнено - обновления нет, но его компоненты продолжают оставаться в хранилище, а процедура очистки стопорится, так как не может выполнить восстановление из дельта разности предыдущих версий компонентов от предшествовавших обновлений, связанных с данным обновлением, для которых оно являлось источником расчета этой самой дельта разности (поэтому у вас и складывается впечатление, что проблема не связана именно с этим обновлением). Четкую зависимость мне пока не удалось выявить - возможно это как то связано, с хотя бы единожды выполненной очисткой с параметром ResetBase, до удаления обновлений, которые стандартная очистка удалить не может, а затем удалением их с помощью скрипта. Решением проблемы могла бы стать собственная процедура удаления обновлений взамен стандартной (дисм), которая бы выполняла восстановление из дельта разности предыдущих версий компонентов, перед удалением самого обновления, но как вы понимаете это непростая задача. | Всего записей: 2474 | Зарегистр. 08-04-2016 | Отправлено: 19:38 16-01-2019 | Исправлено: bifido 76, 19:52 16-01-2019 |
|