Недавно я не смог загрузить файлы, потому что кнопка "Сохранить как" ничего не сделала. Теперь я отмечаю, что не могу даже что-то сохранить из MS Paint, потому что кнопка "Сохранить как" тоже ничего не делает, и я тоже ничего не могу открыть. Кажется, что компонент окон, который определяет те диалоговые окна, пропал (но я не получаю никакой ошибки), или заменен тем, который ничего не делает. Как я могу это исправить? Это известная проблема? Заранее спасибо.

1 ответ1

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 на правильный.

Рекомендации

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .