База данных реестра конфигурации повреждена.

Один из наиболее распространенных вопросов, которые я вижу на форумах и получаю от коллег, – как отлаживать ошибку 1009, также известную как «ошибка ссылки на нулевой объект». Или, как я ее называю, «досадная ошибка москита из ада». вверх, и, к сожалению, сама ошибка не содержит много информации об источнике ошибки. В этом кратком совете мы рассмотрим некоторые шаги, которые вы можете предпринять, чтобы выследить этого комара и хорошо его раздавить.

Если при попытке запустить команду DISM на устройстве с Windows 10 вы обнаружите «Ошибка 1009: база данных реестра конфигурации повреждена. «, То этот пост призван помочь вам. В этом посте мы предложим наиболее подходящие решения, которые вы можете попытаться успешно решить. Решения в этом посте относятся к другим ошибкам DISM в серии 10xx. Если это не так, дайте знать в разделе комментариев после публикации.

База данных реестра конфигурации повреждена.

Ошибка DISM 1009 может появиться при попытке восстановить образ Windows с поврежденным (поврежденным) реестром с помощью одной из следующих команд DISM в командной строке:Dism /Online /Cleanup-Image /RestorehealthDism /Online /Cleanup-image /Restorehealth /source:wim:X:sourcesinstall. wim:1 /LimitAccessВы также можете столкнуться с этой ошибкой при выполнении приведенной ниже команды DISM в среде восстановления Windows (WinRE). Dism. exe /Image:X: /Cleanup-Image /RestorehealthВторой сценарий, который вызывает эту ошибку, — это сбой обновления Windows в Windows 10. Как правило, код ошибки указывает на ошибку, вызванную повреждением файлов реестра, и они должны быть исправлены для решения проблемы. Если вы столкнулись с этой проблемой, вы можете попробовать наши рекомендуемые решения ниже в произвольном порядке и посмотреть, поможет ли это решить проблему.

  • Удалить Центр обновления Windows
  • Восстановить реестр из резервной копии
  • Выполните восстановление системы
  • Выполните восстановление Windows 10 с обновлением на месте

wmic logicaldisk get name

  • Затем введите dir C: в командной строке, чтобы найти диск, на котором находится папка Windows. Это диск, на котором установлена ​​Windows. Замените C алфавитом вашего диска, на котором установлена ​​Windows.
  • Как только вы определите диск, содержащий папку Windows. затем вы можете ввести C: и нажмите Enter. Если это не C, введите соответствующую букву.
  • Затем вы должны создать рабочую папку на своем диске, набрав команду ниже и нажав Enter:

Операция была завершена. Любой откат ожидающих действий будет предпринята после перезагрузки.

Операция завершилась успешно.

Если Windows загружается успешно, все в порядке. Но если он не загружается и пытается снова установить обновления, сделайте следующее:

  • Перезагрузите компьютер и загрузитесь с установочного носителя, как и раньше.
  • Запустите командную строку, следуя инструкциям выше.
  • Теперь вы запускаете следующие три команды в указанном порядке и нажимаете Enter после каждой строки. Заменять C: с буквой вашего диска.
  • Загрузите компьютер с установочного носителя Windows 10 и войдите в командную строку, как показано выше.
  • Тип C: и нажмите Enter, чтобы открыть папку Windows на диске. Заменять C: с буквой вашего диска.
  • Затем в командной строке CMD введите команду ниже и нажимайте Enter после каждой строки:

cd windowssystem32config
md Backup
copy *. * Backup

Возможны два сценария: во-первых, будет список файлов, и их размеры будут отображаться в байтах; вы можете заметить файлы с нулевым байтом (0). Это показывает, что такие файлы реестра либо повреждены, либо пусты, и это должно быть причиной проблемы. Теперь вам следует остановиться на этом, потому что лучше всего здесь восстановить Windows 10 до предыдущего рабочего состояния, которое мы опишем в Решении 3 ниже. Второй сценарий — это когда ни один из отображаемых файлов не имеет нулевых байтов (0). В этом случае вам необходимо выполнить следующую команду:copy *.

  • Выполнение этой команды скопирует файлы реестра из Windows System32 Config RegBack папку в Windows System32 Config папка.
  • Если вам будет предложено, вы должны нажать букву А на клавиатуре, чтобы перезаписать файлы в папке назначения.
  • После того, как файлы закончили копирование, вы теперь набираете exit и нажмите Enter, чтобы выйти из командной строки.
  • Перезагрузите компьютер.
  • Далее выбираем Восстановление системы, или на некоторых ПК вы увидите опцию Вернуться к предыдущей сборке.
  • Теперь выберите свою операционную систему на следующем экране.
  • Нажмите Следующий в мастере восстановления системы.
  • Выберите точку восстановления. Вам нужно выбрать дату, когда ваша система работала нормально.
  • Нажмите Следующий чтобы запустить процесс восстановления системы. По завершении вам будет предложено перезагрузить компьютер или, в большинстве случаев, он перезагрузится автоматически.
Читайте также:  Destiny 2 код ошибки rabbit

Понять ошибку

Жаль, что Adobe не предоставляет (или не может) предоставить дополнительную информацию о причинах этой ошибки. Прежде всего, это довольно тупо сформулировано (как и все их ошибки, но это больше, чем большинство):

Ошибка типа: ошибка № 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект

Давайте попробуем изложить это в повседневных условиях. Ошибка 1009 означает, что вы пытались что-то сделать с переменной, которая, как вы предполагаете, имеет значение, но на самом деле это не так. Flash не нравится это. Тебе это тоже не понравится; представьте, что у вас был стакан, который, как вы предполагали, был полон вкусного напитка по вашему выбору, но на самом деле был пуст. Вы хватаете стакан, ожидая освежающего глотка, но вместо этого вы чувствуете удручающий вес пустого стакана. Это ваша личная ошибка 1009.

В ActionScript, если вы делаете это:

12
var s:String;trace(s. toUpperCase());

При запуске кода Flash будет работать очень быстро (технический термин «выдает ошибку»). Переменная s может быть объявлена, но ее значение равно null (мы никогда не устанавливали значение, просто объявляли переменную), поэтому вызов метода toUpperCase для нее проблематичен.

Для ясности, поскольку s объявлен как String , компилятор не имеет проблем с кодом: есть переменная с именем s , это String , а toUpperCase является допустимым методом для вызова на String s. Ошибка, которую мы получаем, является ошибкой во время выполнения , что означает, что мы получаем ее только при запуске SWF. Только когда логика выполнена, мы можем теперь увидеть, как это получается.

Разрешить отладку

Как и в случае любой ошибки во время выполнения, иногда довольно легко сказать, что происходит, без какой-либо дополнительной информации. Но в других случаях полезно сузить это дальше. На этом этапе попробуйте включить «Разрешить отладку». Когда эта опция включена, вы получаете ошибки, которые также дают номера строк. Кроме того, вы можете «Отладить фильм», нажав Command-Shift-Return / Control-Shift-Enter.

Для этого см. Общую статью с советами по отладке «Исправление ошибок в AS3».

Иногда этого достаточно. Знание конкретной строки может быть всей необходимой вам информацией. Если нет, мы углубимся в следующий шаг.

Читайте также:  КОД ОШИБКИ КРИТИКАЛ ПРОЦЕСС ДИЕТ

Наш дорогой редактор, Майкл Джеймс Уильямс, изложил смысл этого шага в известной статье, которую я с радостью представляю вам сейчас с его любезного разрешения:

Ошибка AS3 один-о-о-девять

Никогда не очень хороший знак.

Не нужно беспокоиться,

И это точно определит причину (ну, линию).

Начните трассировку

Если вы обнаружили нарушающую линию, но все еще не знаете, что происходит, выделите ее. Возьмите каждую переменную в этой строке и проследите их до ошибки.

Поскольку ошибка возникает при доступе к свойству или при вызове метода с нулевой переменной, для покрытия ваших баз вы должны отслеживать любые переменные и свойства, за которыми сразу следует точка. Например, возьмем эту строку кода:

1
myArray. push(someSprite. stage. align. toLowerCase());

Следует признать, что это довольно надуманный кусок кода, для которого я не представляю практического применения, но вы должны определить четыре возможных null значения, к которым обращаются с помощью точки:

  • myArray : мы вызываем метод push для этой переменной
  • someSprite : мы получаем доступ к свойству stage
  • stage : мы получаем доступ к свойству align
  • align : мы вызываем метод toLowerCase

Таким образом, ваш код отладки может выглядеть так:

1234
trace(“myArray: “, myArray);trace(“someSprite: “, someSprite);trace(“someSprite. stage: “, someSprite. stage);trace(“someSprite. stage. align: “, someSprite. stage. align);

Порядок важен; если someSprite является нулевым объектом, но вы проверяете someSprite. stage. align перед тестированием someSprite , вы получите менее someSprite результаты.

Теперь здравый смысл также играет в этом. В моем примере, если stage существует, align будет, безусловно, значение; Stage всегда имеет настройку align , даже если это значение по умолчанию.

Как правило, вы увидите что-то вроде следующего:

Что должно указывать на то, что свойство stage имеет значение null , и теперь вы можете исправить его.

Поиск решения

Самое простое решение – заключить ошибочный оператор в блок if и запускать блок только в том случае, если рассматриваемая переменная не равна нулю. Итак, предполагая, что в нашем предыдущем примере это была фактически null stage , мы могли бы сделать что-то вроде этого:

Этот тест – if (someSprite. stage) – вернет true если есть значение (независимо от значения), и false если оно равно null. В целом эта запись работает; вы всегда можете использовать if (someSprite. stage != null) если хотите. Number s представляет немного другую ситуацию, хотя. Если Number имеет значение 0 , то технически оно имеет значение, но проверка if (someNumberThatEqualsZero) оценивается как false. Для Number s вы можете использовать isNaN() чтобы определить, хранится ли допустимое числовое значение в данной переменной.

В любом случае, эта техника – простой способ обойти ошибку. Если переменная, с которой мы хотим выполнить операцию, не установлена, не делайте эту операцию. Если в нашем стакане нет вкусного напитка, не поднимайте его. Достаточно просто.

Но такой подход возможен только в том случае, если логика является необязательной. Если логика требуется, то, возможно, вы можете указать значение по умолчанию для сомнительной переменной перед операцией ошибки. Например, если myArray потенциально может быть null , но обязательно, чтобы это было не так, мы можем сделать это:

Сначала будет проверено, является ли массив null. Если это так, инициализируйте его пустым массивом (пустой массив является допустимым значением. Он может быть пустым, но это не массив, а массив) перед запуском надуманной строки кода. Если он не null , перейдите прямо к надуманной строке кода. В реальных условиях, если наш стакан пуст, то наполните его вкусным напитком, прежде чем поднять его.

Читайте также:  Проверьте настройки брандмауэра для портов 9958 и устраните проблему с кодом 1 ошибки закрытого соединения удаленного узла

Кроме того, если myArray является свойством экземпляра класса, в котором выполняется эта строка кода, вы можете довольно безопасно обеспечить допустимое значение, инициализируя свои свойства при инициализации объекта.

Что если логика требуется, но рассматриваемая переменная не так легко находится под нашим контролем? Например, что, если требуется наша искусственная строка кода, но сомнительной переменной является someSprite. stage ? Мы не можем просто установить свойство stage ; это внутренне контролируется DisplayObject и DisplayObject только для нас, простых смертных. Тогда вам может понадобиться стать хитрым и прочитать следующий шаг.

Работа с null стадией

Вероятно, существует бесконечное количество сценариев, в которых данная переменная или свойство могут быть null. Очевидно, я не могу охватить их все в кратком совете. Однако есть одна конкретная ситуация, которая возникает снова и снова.

Допустим, вы пишете некоторый код, который выглядит следующим образом:

Еще один надуманный фрагмент кода (который может вызвать приступы – считайте, что вас предупредили), но в основном идея заключается в том, что у вас есть подкласс Sprite и вы устанавливаете его как класс для клипа на сцене, используя Flash IDE.

Однако вы решаете, что хотите работать с этими QuickSprite программно. Итак, вы попробуйте это:

12
var qs:QuickSprite = new QuickSprite();addChild(qs);

И вы получите проклятую ошибку 1009. Почему? Потому что в конструкторе QuickSprite вы QuickSprite доступ к свойству stage (унаследованному от DisplayObject ). Когда объект создается полностью с помощью кода, он не находится на стадии в тот момент, когда выполняется эта строка кода, что означает, что stage имеет значение null и вы получите ошибку. QuickSprite добавляется в следующую строку, но это не достаточно скоро. Если экземпляр создается путем перетаскивания символа из библиотеки на сцену, то за кулисами работает немного магии, которая гарантирует, что экземпляр находится на сцене (то есть свойство stage установлено) во время конструктор

Итак, вот что вы делаете: вы проверяете наличие значения для stage. В зависимости от результата, вы можете сразу запустить настроенный код или настроить другой приемник событий, когда QuickSprite будет добавлен на сцену. Что-то вроде этого:

Если мы переместим линию stage в другую функцию и вызовем эту функцию только тогда, когда у нас есть сцена, тогда мы настроены. Если stage существует с самого начала, продолжайте и сразу же запустите init(). Если нет, мы будем использовать init() в качестве функции прослушивания событий для ADDED_TO_STAGE , после чего у нас будет сценическое значение и мы сможем выполнить код. Теперь мы можем использовать класс для подключения к IDE Sprite или полностью программно.

Это хорошо работает и в классах документов. Когда вы сами запускаете SWF, класс документа имеет немедленный доступ к stage. Если вы загрузите этот SWF-файл в другой SWF-файл, код в стеке инициализации класса документа будет выполнен до того, как загруженный SWF-файл будет добавлен на экран. Подобный трюк с проверкой stage позволит вам работать с SWF как с автономной частью, так и с SWF, загруженным в содержащий SWF.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *