Недавно я не смог загрузить файлы, потому что кнопка "Сохранить как" ничего не сделала. Теперь я отмечаю, что не могу даже что-то сохранить из MS Paint, потому что кнопка "Сохранить как" тоже ничего не делает, и я тоже ничего не могу открыть. Кажется, что компонент окон, который определяет те диалоговые окна, пропал (но я не получаю никакой ошибки), или заменен тем, который ничего не делает. Как я могу это исправить? Это известная проблема? Заранее спасибо.
1 ответ
Анализ
Функции Windows API, которые обрабатывают эти диалоговые окна, находятся в файле библиотеки comdlg32.dll
, который обычно находится в C:\Windows\System32
:
Библиотека общих диалоговых окон содержит набор диалоговых окон для выполнения общих задач приложения, таких как открытие файлов, выбор значений цвета и печать документов.
Источник: Библиотека общих диалоговых окон
В этом случае файл был заменен более старой версией, предназначенной для Windows 9x:
Size: 176128 bytes
Version: 4.72.3510.2300
Для сравнения ниже приведен оригинальный файл, включенный в пакет обновления 3 (SP3) для Windows XP:
Size: 276992 bytes
Version: 6.00.2900.5512
Эта проблема называется DLL stomping, и обычно возникает, когда программа перезаписывает системную библиотеку более ранней несовместимой версией. Запущенный notepad
быстро подтвердил это:
Не удалось найти точку входа в процедуру PrintDlgExW в библиотеке динамических ссылок comdlg32.dll.
разрешение
Вы можете выполнить проверку системы, выполнив команду sfc /scannow
. Если какой-либо системный файл отсутствует или поврежден, программа попытается восстановить его. При необходимости вам будет предложено вставить установочный компакт-диск Windows XP.
Примечание. Эта процедура требует прав администратора.
Временное решение
Если у вас есть доступ к установочному носителю Windows XP SP3, вы можете получить исходный файл, скопировав COMDLG32.Файл DL_ внутри папки I386 . Затем вы должны распаковать его, выполнив следующие команды из командной строки:
cd /d "X:\Folder\containing\COMDLG32.DL_"
expand COMDLG32.DL_ comdlg32.dll
В этот момент вы можете загрузить любой Linux live CD/DVD/USB, а затем вручную заменить старый файл comdlg32.dll
на правильный.