Класс не зарегистрирован visual studio
либо установите его, восстановите (через программы добавления/удаления), либо зарегистрируйте (через Regsvr32.исполняемый.)
вы не предоставили достаточно информации для нас, чтобы помочь вам больше, чем этот.
вам нужно убедиться, что все ваши сборки компилируются для правильной архитектуры. Попробуйте изменить архитектуру x86, если переустановка com-компонента не работает.
также обратите внимание, что контекст класса при инициализации может создать это исключение. Если у вас есть объект, который закодирован как INPROC_SERVER, но вы пытаетесь CoCreateInstance как CLSCTX_LOCAL_SERVER, вы также получите эту ошибку.
Если в веб-приложении IIS используются 64-разрядные компоненты COM, убедитесь, что пул приложений настроен на запрещение 32-разрядных приложений (включить 32-разрядные приложения: false дополнительные параметры)
моя проблема и решение
У меня есть 32-битная сторонняя dll, которую я установил в машине 2008 R2, которая является 64-битной.
У меня есть служба wcf, созданная в .net 4.5 framework, которая вызывает 32-разрядную стороннюю dll для процесса. Теперь у меня есть свойство build, установленное для целевого "любого" процессора и развернутого на 64-битной машине.
теперь я использовал ProcMon.exe для отслеживания проблемы реестра com и определил, что процесс ищет запись реестра в HKLM\CLSID и HKCR\CLSID, где нет записи.
известно, что Microsoft не будет зарегистрировать 32-битный com-компоненты на пути\идентификатор CLSID реестра HKLM, раздел hkcr и CLSID\в 64-разрядной машине, а он помещает запись в HKLM\Wow6432Node\CLSID и разделе hkcr\Wow6432Node\идентификатор CLSID пути.
теперь конфликт является 64-битным процессом попытка вызвать 32-разрядный процесс в 64-разрядной машине, которая будет искать запись реестра в HKLM\CLSID, HKCR\CLSID. Решение заключается в том, что мы должны заставить 64-битный процесс посмотреть запись реестра на HKLM\Wow6432Node\CLSID и HKCR\Wow6432Node\CLSID.
Это может быть достигнуто путем настройки свойств проекта службы wcf для целевой машины " X86 "вместо " любой".
после развертывания версии X86 на сервере 2008 R2 возникла проблема "Система.BadImageFormatException: не удалось загрузить файл или сборку"
решение этого badimageformatexception устанавливает "Enable32bitApplications" в "True" в свойствах IIS Apppool для правильного apppool.
Я получил его для работы, включив 32-битные приложения в расширенных настройках пула приложений. Щелкните правой кнопкой мыши пул приложений и выберите Дополнительные настройки - включить 32-разрядные приложения. Это может кому-то помочь.
путем регистрации класса ( в частности, его CLSID) -- см., например,здесь.
Если конструктор Windows Forms не загружается из-за ошибки в коде, в стороннем компоненте или где-то еще, вместо конструктора появится страница ошибок. Эта страница ошибок не обязательно означает ошибку в конструкторе. Ошибка может находиться где-то на странице с выделенным кодом с именем .Designer.cs. Ошибки отображаются в свертываемых желтых строках со ссылкой для перехода к расположению ошибки на кодовой странице.
Вы можете игнорировать ошибки и продолжить загрузку конструктора, нажав кнопку Пропустить и продолжить. Это действие может привести к непредвиденному поведению, например, элементы управления могут не отображаться в области конструктора.
Экземпляры ошибки
При развертывании желтой строки ошибок отображается каждый экземпляр ошибки. Многие типы ошибок содержат точное местоположение в следующем формате: [имя_проекта][имя формы] строка:[номер строки] столбец:[номер столбца]. Если с ошибкой связан стек вызовов, можно щелкнуть ссылку Показать стек вызовов. Изучение стека вызовов может помочь устранить ошибку.
- Для приложений Visual Basic на странице ошибок во время разработки отображается только одна ошибка, но может отображаться несколько экземпляров одной и той же ошибки.
- Для приложений C++ ошибки не содержат ссылок на расположение кода.
Справка по ошибке
Ошибки времени разработки
В этом разделе перечислены потенциальные ошибки.
не является допустимым идентификатором
Эта ошибка указывает, что поле, метод, событие или объект имеют неправильное имя.
уже существует вотсутствует на панели элементов
Сторонний конструктор пытался получить доступ к вкладке на панели элементов, которая не существует. Обратитесь к поставщику компонентов.
Синтаксический анализатор запрошенного языка не установлен
Отсутствует служба, которая требуется для генерирования и анализа исходного кода
Это проблема со сторонним компонентом. Обратитесь к поставщику компонентов.
Произошло исключение при попытке создать экземплярСторонний конструктор запросил у Visual Studio создание объекта, но объект вызвал ошибку. Обратитесь к поставщику компонентов.
Документ открыт в несовместимом режиме в другом редакторе
Изменения в документ уже внесены в другом редакторе
Закройте и снова откройте конструктор, чтобы изменения вступили в силу. Как правило, Visual Studio автоматически перезагружает конструктор после внесения изменений. Однако другие конструкторы, такие как сторонние конструкторы компонентов, могут не поддерживать поведение перезагрузки. В этом случае Visual Studio предлагает закрыть и повторно открыть конструктор вручную.
Файл открыт в несовместимом режиме в другом редакторе
Слишком высокий ранг массиваVisual Studio поддерживает только одномерные массивы в блоке кода, анализируемом конструктором. Многомерные массивы допустимы за пределами этой области.
Не удалось открыть сборку Неправильный тип элемента. Этот сериализатор ожидает элемент типаЭто проблема со сторонним компонентом. Обратитесь к поставщику компонентов.
Не удается получить доступ к панели элементов Visual Studio
Visual Studio сделала вызов к панели элементов, которая была недоступна. Если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
Не удается привязать обработчик событий к событию , так как событие доступно только для чтения
Эта ошибка чаще всего возникает при попытке подключить событие к элементу управления, наследуемому от базового класса. Если переменная, входящая в элемент управления, является закрытой, Visual Studio не удается подключить событие к методу. К наследуемым в частном порядке элементам управления невозможно привязывать дополнительные события.
Не удается создать имя метода для указанного компонента, так как он не является членом контейнера конструктора
Visual Studio попыталась добавить обработчик событий в компонент, не имеющий переменной-члена в конструкторе. Обратитесь к поставщику компонентов.
Не удается присвоить объекту имя , поскольку у него уже есть имяЭто внутренняя ошибка в сериализаторе Visual Studio. Она указывает, что сериализатор дважды пытался назвать объект, что не поддерживается. Если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
Не удается удалить или уничтожить унаследованный компонентНаследуемые элементы управления находятся под контролем наследующего класса. Изменения в наследуемом элементе управления должны быть внесены в класс, из которого создается элемент управления. Таким образом, нельзя переименовать или уничтожить его.
В категории нет инструмента для классаКонструктор пытался ссылаться на класс на определенной вкладке панели элементов, но класс не существует. Обратитесь к поставщику компонентов.
Для класса отсутствует соответствующий конструктор
Сторонний конструктор запросил Visual Studio создать объект с определенными параметрами в конструкторе, который не существует. Обратитесь к поставщику компонентов.
Не удалось создать код для свойстваКомпонент не вызвал метод Container.Add() в своем конструкторе
Это ошибка в компоненте, который вы только что загрузили или поместили в форму. Она указывает, что компонент не добавил себя в контейнерный элемент управления (будь то другой элемент управления или форма). Конструктор продолжит работу, но во время выполнения могут возникнуть проблемы с компонентом.
Имя компонента не может быть пустым
Эта ошибка возникает при попытке переименовать компонент в пустое значение.
Не удалось получить доступ к переменной , так как она еще не инициализирована
Эта ошибка может возникнуть из-за двух сценариев. У стороннего поставщика компонентов возникла проблема с элементом управления или компонентом, которые они распространили, или написанный вами код имеет рекурсивные зависимости между компонентами.
Не удалось найти тип Не удалось загрузить типНе удалось найти шаблоны элементов проекта для унаследованных компонентов
Шаблоны для унаследованных форм в Visual Studio недоступны. Если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
Делегат класса не имеет метод вызова. Является ли этот класс делегатом
Visual Studio попыталась создать обработчик событий, но с типом события возникла ошибка. Это может произойти, если событие было создано языком, не соответствующим CLS. Обратитесь к поставщику компонентов.
Повторное объявление членаЭта ошибка возникает из-за того, что переменная-член была объявлена дважды (например, два элемента управления Button1 объявляются в коде). Имена должны быть уникальными в унаследованных формах. Кроме того, имена не могут различаться только регистром.
Ошибка чтения ресурсов из файла ресурсов для языка и региональных параметровЭта ошибка может возникнуть, если в проекте имеется неправильный RESX-файл.
Ошибка чтения ресурсов из файла ресурсов для языка и региональных параметров по умолчаниюЭта ошибка может возникнуть, если в проекте имеется неправильный RESX-файл для языка и региональных параметров по умолчанию.
Не удалось проанализировать метод Недопустимое имя компонента:Тип класса образуется несколькими разделяемыми классами из того же файла
При определении класса в нескольких файлах с помощью ключевого слова partial в каждом файле может быть только одно частичное определение.
Чтобы устранить эту ошибку, удалите все, кроме одного частичного определения класса из файла.
Не удалось найти сборкуНедопустимое имя сборки .
Компонент запросил определенную сборку, но имя, предоставленное компонентом, не является допустимым именем сборки. Обратитесь к поставщику компонентов.
Не удается создать базовый классVisual Studio загрузила класс, но этот класс не может быть создан, так как средство реализации класса не предоставило конструктор. Если класс поддерживает конструктор, убедитесь, что у вас нет проблем, вызывающих ошибки с отображением в конструкторе, например ошибки компилятора. Кроме того, убедитесь, что все ссылки на класс правильные, все имена классов написаны без ошибок. В противном случае, если класс недоступен для создания, измените его в представлении кода.
Не удалось загрузить базовый классНевозможно создать класс в этой версии Visual Studio
Конструктор для этого элемента управления или компонента не поддерживает те же типы, что и Visual Studio. Обратитесь к поставщику компонентов.
Имя класса в этом языке является недопустимым идентификатором
Не удается добавить компонент, так как он содержит циклическую ссылку наНельзя добавить элемент управления или компонент в него же. Другая ситуация, когда это может произойти: в методе InitializeComponent формы (например, Form1) есть код, который создает другой экземпляр Form1.
Невозможно изменить конструктор
Эта ошибка возникает, когда файл в редакторе помечается как доступный только для чтения. Убедитесь, что файл не помечен только для чтения и приложение не запущено.
Для данного файла не удалось отобразить конструктор, так как в нем отсутствуют классы для разработки
Эта ошибка возникает, когда Visual Studio не удается найти базовый класс, удовлетворяющий требованиям конструктора. Формы и элементы управления должны быть производными от базового класса, поддерживающего конструкторы. Если вы создаете производный элемент из унаследованной формы или элемента управления, убедитесь, что проект создан.
Не установлен конструктор базового классаVisual Studio не удалось загрузить конструктор для класса. Если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
Конструктор должен создать экземпляр типа , однако сделать это не удалось, поскольку тип объявлен абстрактным
Эта ошибка произошла из-за того, что базовый класс объекта, передаваемого конструктору, является абстрактным, а это запрещено.
Не удалось загрузить файл в конструктор
Базовый класс этого файла не поддерживает конструкторы. В качестве обходного решения используйте представление кода для работы с файлом. Щелкните правой кнопкой мыши файл в обозревателе решений и выберите пункт Просмотр кода.
Язык этого файла не поддерживает службы, необходимые для создания и разбора кода
Эта ошибка, скорее всего, возникла из-за открытия файла, который находится в проекте, не поддерживающем конструкторы.
Класс синтаксического анализатора языка не реализован должным образом.
Используемый язык зарегистрировал класс конструктора, который не является производным от правильного базового класса. Обратитесь к поставщику используемого языка.
Имя уже используется другим объектом
Это внутренняя ошибка в сериализаторе Visual Studio. Если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
В объекте не реализован интерфейс IComponent
Visual Studio попыталась создать компонент, но созданный объект не реализует интерфейс IComponent. Обратитесь к поставщику компонентов за исправлением.
Объект вернул пустое значение для свойства , что недопустимо
Объект данных сериализации имеет неверный тип
Объект данных, предлагаемый сериализатором, не является экземпляром типа, соответствующего используемому текущему сериализатору. Обратитесь к поставщику компонентов.
Не удается определить расположение требуемой службыСлужба, необходимая Visual Studio, недоступна. Если вы пытались загрузить проект, который не поддерживает этот конструктор, используйте редактор кода для внесения необходимых изменений. В противном случае, если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
Экземпляр службы должен быть производным от интерфейса или содержать его реализацию
Эта ошибка указывает, что компонент или конструктор компонентов вызвал метод AddService, для которого требуется интерфейс и объект, но указанный объект не реализует указанный интерфейс. Обратитесь к поставщику компонентов.
Не удалось изменить текст в окне кода
Эта ошибка возникает, если Visual Studio не удается изменить файл из-за проблем с местом на диске или памятью, или файл помечен только для чтения.
Объект перечислителя панели элементов поддерживает одновременное извлечение только одного элемента
Если вы видите эту ошибку, зарегистрируйте ее с помощью функции Сообщить о проблеме.
Из панели элементов не удалось загрузить элемент для компонентаУказанный компонент вызвал исключение при доступе к нему Visual Studio. Обратитесь к поставщику компонентов.
Из панели элементов не удалось загрузить элемент для элемента панели элементовЭта ошибка возникает, если данные в элементе панели элементов повреждены или версия компонента изменилась. Попробуйте удалить элемент из панели элементов и добавить его снова.
Не удалось найти тип .
При загрузке конструктора Visual Studio не удалось найти тип. Убедитесь, что имеется ссылка на сборку, содержащую тип. Если сборка является частью текущего проекта разработки, убедитесь, что проект создан.
Служба разрешения типов может быть вызвана только из потока основного приложения
Переменная либо не объявлена, либо никогда не присваивалась
Для команды меню уже существует обработчик команд
Эта ошибка возникает, если сторонний конструктор добавляет команду, которая уже имеет обработчик в таблице команд. Обратитесь к поставщику компонентов.
Компонент с именем уже существует
Сторонний компонент выполнил обратный вызов к элементу на вкладке панели элементов, но элемент уже содержал обратный вызов. Обратитесь к поставщику компонентов.
Языковые средства для данного языка не поддерживаю CodeModel, с помощью которой загружается конструктор
Тип не имеет конструктора с параметрами типовVisual Studio не удалось найти конструктор с соответствующими параметрами. Это может быть результатом предоставления конструктора с типами, отличными от требуемых. Например, конструктор Point может принимать два целых числа. Если вы указали число с плавающей запятой, возникает эта ошибка.
Не удается добавить ссылку в текущее приложение
Не удалось извлечь текущий файл
Эта ошибка возникает при изменении файла, который в настоящее время записывается в систему управления исходным кодом. Как правило, Visual Studio представляет диалоговое окно возврата файла, чтобы пользователь мог извлечь файл. На этот раз файл не был извлечен, возможно, из-за конфликта слияния во время возврата. Чтобы устранить эту ошибку, убедитесь, что файл не заблокирован, а затем попробуйте извлечь файл вручную.
Не удается найти страницу с именемЭта ошибка возникает, когда конструктор компонентов запрашивает доступ к странице из диалогового окна "Параметры", используя имя, которое не существует. Обратитесь к поставщику компонентов.
Не удается найти свойство на страницеЭта ошибка возникает, когда конструктор компонентов запрашивает доступ к определенному значению на странице из диалогового окна "Параметры", используя значение, которое не существует. Обратитесь к поставщику компонентов.
В Visual Studio не удается открыть конструктор файла, так как класс этого файла не унаследован от класса, поддерживающего визуальную разработку
В Visual Studio не удается сохранить или загрузить экземпляры типаЭто проблема со сторонним компонентом. Обратитесь к поставщику компонентов.
Документ не удалось открыть в Visual Studio в представлении конструктора
Эта ошибка указывает, что язык проекта не поддерживает конструктор и возникает при попытке открыть файл в диалоговом окне "Открыть файл" или из Обозревателя решений. Вместо этого измените файл в представлении кода.
В Visual Studio не удалось найти конструктор для классов типаVisual Studio загрузила класс, но класс невозможно создать. Вместо этого измените класс в представлении кода, щелкнув класс правой кнопкой мыши и выбрав Просмотреть код.
I solved it without changing the build target to 'x86'. Solution in the link :
20 Answers 20
You need to make sure all of your assemblies are compiling for the correct architecture. Try changing the architecture for x86 if reinstalling the COM component doesn't work.
This solved my process not finding the NAV 2009 R2 Client (ClassID 50000004-0000-1000-0001-0000836BD2D2).
It looks like whichever program or process you're trying to initialize either isn't installed on your machine, has a damaged installation or needs to be registered.
Either install it, repair it (via Add/Remove Programs) or register it (via Regsvr32.exe).
You haven't provided enough information for us to help you any more than this.
My problem and the solution
I have a 32 bit third party dll which i have installed in 2008 R2 machine which is 64 bit.
when i tried to invoke the wcf service got error "80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"
Now i used ProcMon.exe to trace the com registry issue and identified that the process is looking for the registry entry at HKLM\CLSID and HKCR\CLSID where there is no entry.
Came to know that Microsoft will not register the 32 bit com components to the paths HKLM\CLSID, HKCR\CLSID in 64 bit machine rather it places the entry in HKLM\Wow6432Node\CLSID and HKCR\Wow6432Node\CLSID paths.
Now the conflict is 64 bit process trying to invoke 32 bit process in 64 bit machine which will look for the registry entry in HKLM\CLSID, HKCR\CLSID. The solution is we have to force the 64 bit process to look at the registry entry at HKLM\Wow6432Node\CLSID and HKCR\Wow6432Node\CLSID.
This can be achieved by configuring the wcf service project properties to target to 'X86' machine instead of 'Any'.
After deploying the 'X86' version to the 2008 R2 server got the issue "System.BadImageFormatException: Could not load file or assembly"
Solution to this badimageformatexception is setting the 'Enable32bitApplications' to 'True' in IIS Apppool properties for the right apppool.
Часто ошибка появляется при открытии или при работе в программе 1C.
Ошибка с классом появляется даже при запуске программы 1C
У ошибки могут быть такие причины:
- Конфликт между двумя установленными антивирусами, например, «Защитником Виндовс» и сторонним защитным ПО Avast. В этом случае удалите стороннее ПО либо выключите полностью одно из приложений, чтобы они не работали одновременно.
- Заражение ПК вирусами — проверьте устройство постоянным антивирусом, который установлен в данный момент у вас на ПК, и дополнительным портативным средством (AVZ, Dr.Web CureIt, Windows Safety Tool и другие).
- Неграмотное удаление программ без последующей чистки реестра и жёсткого диска от остаточных файлов и записей. Если вы вновь установите удалённую таким образом программу, она будет работать со сбоями.
Как устранить возникшую ошибку
Методов устранения возникшей проблемы можно найти несколько.
Перезагружаем компьютер
Самое простое и банальное решение в данной ситуации — перезагрузка ПК. Возможно, произошёл сбой в системе, который может устранить перезапуск «операционки». Выполните его правильно — через панель «Пуск». Выберите либо перезагрузку, либо завершение работы. В последнем случае придётся самостоятельно включать устройство через клавишу питания.
Завершите работу ПК либо сразу выберите опцию перезагрузки
Устраняем ошибку с открытием изображений
Если неполадка возникает при запуске каких-либо изображений, фотографий, просто поставьте другую утилиту, которая будет по умолчанию открывать файл такого типа:
- Раскройте интерфейс панели «Параметры» — через кнопки I и Windows либо меню «Пуск» (под изображением профиля будет шестерня). Щёлкните по шестерёнки на панели «Пуск»
- Запускаем раздел, предназначенный для настройки приложений. В параметрах запустите раздел «Приложение»
- Во второй вкладке для определения утилит по умолчанию находим пункт для просмотра изображений (фотографий) — щёлкаем по нему. Откройте пункт «Просмотр фотографий» в разделе «Приложения по умолчанию»
- В сером меню слева выбираем другую утилиту для запуска файлов. В появившемся списке выберите нужную программу для запуска фотографий и изображений
- Вы можете просто сбросить значения для всех типов файлов с помощью кнопки в самом низу страницы — для открытия файлов будут использоваться в дальнейшем только фирменные приложения от компании «Майкрософт». Нажав на «Сбросить», вы установите значения по умолчанию — все файлы будут открываться через фирменные утилиты Microsoft
После этого перезагрузите ПК либо службу «Проводник Виндовс», если вы не хотите выключать ПК:
- Запускаем «Диспетчер задач» через контекстное меню «Панели задач». Щёлкаем по нему правой клавишей и выбираем в меню на тёмном фоне строчку диспетчера. Либо используем классическую комбинацию клавиш Ctrl + Alt + Delete. В меню «Панели задач» выберите «Диспетчер задач»
- Находим в перечне системных процессов в первой вкладке пункт «Проводник». Во вкладке «Процессы» отыщите строку «Проводник»
- Кликаем по нему правой кнопкой и выбираем опцию перезапуска. Ждём, когда процесс перезагрузиться и пробуем запустить файл. Подождите, пока перезапустится процесс «Проводник»
Для установки другой программы по умолчанию можно использовать и немного другой способ:
- Отыщите в «Проводнике Виндовс» файл — кликните по нему сначала левой клавишей мышки один раз для выделения файла, а затем правой для вызова дополнительного меню. В нём наведите стрелку на строчку «Открыть с помощью». Во втором меню выберите последний пункт для другого приложения. Переведите курсор мыши на значение «Открыть с помощью» и выберите последний пункт
- В другом окошке прокрутите список с другими вариантами программ, определитесь с приложением, выделите его левой кнопкой.
- Поставьте галочку рядом с пунктом «Всегда использовать». Щёлкните по ОК для сохранения всех изменений. Выберите программу, выделите галочкой параметр внизу и нажмите на ОК
Устраняем ошибку с запуском программ
- Запустите меню «Параметры» и раздел «Приложения», а в нём вкладку для утилит по умолчанию. Прокрутите страницу вниз и выберите самую последнюю ссылку «Задать значения по умолчанию по приложению». Перейдите по ссылке «Задать значения по умолчанию»
- На новой странице щёлкните левой кнопкой по программе, например, по браузеру, после запуска которого выскакивает ошибка. Щёлкните по клавише «Управление». Отыщите в списке проблемную программу и откройте раздел для управления
- Для каждого типа файла, напротив которого стоит проблемная утилита, изменить программу, которая будет автоматически его запускать: щёлкните левой мышкой по логотипу программы. Там, где установлена проблемная программа, поставьте другую
- В вызванном меню слева выберите среди представленных другое приложение. Выберите приложение в появившемся меню
Если у вас возникла проблема со встроенным обозревателем Internet Explorer, описанная инструкция может вам не помочь. В этом случае приступаем к выполнению таких шагов:
- Нажмите на R и Windows на клавиатуре — наберите в вызванном окне код cmd. Для его выполнения и запуска консоли от имени администратора зажмите одновременно три кнопки: Enter + Ctrl + Shift. Вставьте команду cmd и кликните по ОК
- Ещё один метод запуска — через поисковую строку на «Панели задач». Введите ту же команду cmd — щёлкните по строчке «Командная строка» в результатах правой кнопкой. Напишите в поисковой строке команду cmd
- В сером меню кликните по первой опции. Выберите «Запуск от имени администратора»
- Дайте согласие на внесение изменений в вашей «операционке». Разрешите консоли вносить изменения
- В чёрном редакторе наберите самостоятельно либо вставьте команду regsvr32 ExplorerFrame.dll — нажмите на Enter и подождите, пока консоль проведёт операцию. Выполните в консоли команду regsvr32 ExplorerFrame.dll
- Перезагрузите ПК и посмотрите, исчезла ли ошибка.
Если у вас не альтернативной программы, которой вы могли бы заменить проблемную, попробуйте её переустановить: полностью удалить с ПК, а затем снова поставить. Если ошибка возникает при запуске стороннего приложения, избавьтесь от него на время с помощью деинсталлятора, который полностью почистит вашу систему от файлов, оставшихся после удаления основных документов программы. Один из таких деинсталляторов — Revo Uninstaller. После удаления перезагружаем ПК и устанавливаем заново приложение (скачиваем его инсталлятор только с официального источника).
Если вы речь идёт о встроенной утилите Windows 10, удалить программу вы можете следующим образом:
- Нажмите на кнопку «Пуск».
- В левой части появившегося окна увидите список установленного софта. Найдите тот, с которым у вас возникают проблемы.
- Нажмите на его название ПКМ и выберите пункт «Удалить». Удалите приложение в меню «Пуск»
- Затем запустите встроенный «Магазин» или Windows Store. Найдите в нём через поисковую строку удалённое ранее ПО и установите его заново. Для этого достаточно кликнуть по кнопке «Получить» или «Установить» на главной странице. Установите приложение снова через магазин «Виндовс»
Не все встроенные в «Виндовс» утилиты можно удалить описанным способом. Если он не помог, воспользуйтесь консолью PowerShell:
- Кликните правой кнопкой мыши по кнопке «Пуск» и выберите строчку «Windows PowerShell (администратор)». Нажмите на «Да», чтобы разрешить консоли вносить изменения на ПК. Запустите PowerShell от имени администратора
- Первым делом введите команду Get-AppxPackage | Select Name, PackageFullName. Это позволит отобразить список всех встроенных приложений «Виндовс». Выполните команду Get-AppxPackage | Select Name, PackageFullName
- Для удаления предустановленной программы найдите её полное название и наберите команду Get-AppxPackage PackageFullName | Remove-AppxPackage, где вместо PackageFullName прописывается имя программы, которую вы хотите удалить. Очень удобно в PackageFullName использовать символ *, который является своеобразным шаблоном и обозначает любую последовательность символов. Например, для деинсталляции Zune Video, можно ввести следующую команду: Get-AppxPackage *ZuneV* | Remove-AppxPackage. Удалите программу в консоли через специальную команду
Если в окошке с уведомлением об ошибке вы видите название исполняемого файла Explorer.exe, решить проблему вы сможете с помощью принудительной деактивации компонента Internet Explorer. Как это сделать, подробно опишем в инструкции:
Универсальный способ решения проблемы через настройки DCOM
Вне зависимости от того, что является причиной ошибки, и в какой ситуации она появилась, можно использовать встроенный инструмент «Виндовс» «Служба компонентов» для решения. Ход действий в нём будет следующим:
Восстановление Windows 10 до более раннего состояния, когда данной проблемы ещё не было
Если ни один из способов не оказался действенным, на помощь придёт процедура восстановления ПК с помощью одной из ранее созданных точек. Точка восстановления — состояние системы на определённый период (день и время), зафиксированное в отдельном файле. С помощью встроенного в «Виндовс» средства восстановления и такой точки можно «вернуться в прошлое» — отменить все изменения, которые были сделаны на ПК за весь период времени после создания точки:
Суть проблемы
Как то одним жарким летним вечером я решил установить на свой компьютер ActeiveState ActivePerl. Скачал инсталлятор, который был в .msi файле и запустил его. Каково же было мое удивление, когда вместо привычного инсталлятора я увидел вот это:
Как вскоре оказалось, подобная ошибка выпадала при запуске на моем компьютере любого .msi файла.
- Переустановить Windows Installer — на моей Windows 7 x64 и так стоит Windows Installer 5.0, который нельзя отдельно скачать и переустановить
- Перерегистрировать msiexec, что также мне не помогло.
- В конце все советы сводились к одному — переустановить Windows.
Решение проблемы
Для начала я включил Log-файл установщика Windows. Как включить лог Windows Installer вы можете почитать здесь, или поискать в любом поисковике по ключевому слову "voicewarmup".
Лог-файлы появляются во временной папке пользователя, которая обычно находится по пути C:\Users\имя_профиля\AppData\Local\Temp. Открыв лог, я увидел следующую ошибку:
MSI (c) (B8:84) [22:08:06:894]: Failed to connect to server. Error: 0x80040154
Поискав по коду ошибки в Интернете, и не нашедши никаких способов решения проблемы, я решил подумать логически.
Для начала я воспользовался старым добрым отладчиком WinDbg, который входит в пакет Debugging Tools For Windows. Мне понадобилась именно 64-разрядная версия данного отладчика.
Перед началом отладки необходимо загрузить отладочные символы для распознавания имен системных функций и переменных. Эти символы являются довольно полезной вещью не только для поиска ошибок, но также и для исследования работы Windows в целом.
Загрузил я в отладчик файл c:\windows\system32\msiexec.exe и задал для него параметры командной строки так, чтобы он открыл .msi файл. В моем случае параметром командной строки было: /i «C:\Users\MAV\Desktop\ActivePerl-5.12.4.1205-MSWin32-x64-294981.msi» однако можно задавать путь к любому другому .msi файлу.
Сам по себе отладчик, конечно не решит проблему, нужно ее локализовать. Поразмыслив, какие функции могут создавать COM-объекты, я остановился на CoCreateInstance, CoCreateInstanceEx и CoGetClassObject
Для установки точек прерывания на эти функции вводим в командной строке отладчика:
bp ole32!CoCreateInstance
bp ole32!CoCreateInstanceEx
bp ole32!CoGetClassObject
Если точки останова у вас не ставятся, значит вы неправильно настроили символы.
После запуска приложения (F5), срабатывает точка останова на ole32!CoCreateInstance. Если точка останова не срабатывает, а выпадает окно с параметрами Wndows Installer, то вы неправильно указали параметры командной строки для запуска.
Давайте теперь посмотрим, из какого же места кода вызывается создание нашего объекта, для этого мы можем нажать Debug->Step Out (Shift+F11). Мне пришлось нажать указанную комбинацию дважды, для того чтобы выйти в исходную вызывающую функцию.
Исходная вызывающая функция называется msi!CreateMsiServerProxy и, очевидно, находится в модуле msi.dll.
Обратим внимание также на регистр rax, который равен нашему коду ошибки 80040154. Для того чтобы узнать содержимое регистра rax, достаточно открыть окно Registers, или ввести в командной строке r rax .
Запомнив имя функции, а также примерный вид искомого кода, я открыл дизассемблер IDA Pro, и загрузил в него файл msi.dll. Следует отметить пару особенностей данного отладчика: во первых, IDA любит блокировать доступ к исследуемому файлу, во вторых, она создает в папке с исследуемым файлом несколько своих файлов баз данных, так что я рекомендую копировать исследуемые файлы в отдельную папку. В третьих, IDA не всегда подгружает файлы с символами, поэтому рекомендую в указанную отдельную папку также скопировать файл msi.pdb из вышеуказанной папки C:\Symbols.
После нахождения функции CreateMsiServerProxy, находим знакомые строки кода в ней:
Не иначе как функция пытается создать объект по CLSID IID_IMsiServer. Здесь я не буду вдаваться в подробности COM и искать различия между CLSID и IID, важно что я получил зацепку — имя интерфейса ID_IMsiServer и CLSID .
Запустив поиск в реестре на своей машине по указанным ключевым словам, а также на машине, с установленной Windows 7 x64, где Windows Installer работал, я нашел отличие: на моей машине отсутствовала ветка реестра HKEY_CLASSES_ROOT\AppID\ . Я экспортировал данную ветку реестра в отдельный .reg файл, а затем импортировал его на своей машине:
Windows Registry Editor Version 5.00
После импорта ключа реестра я вновь попробовал запустить .msi файл, и, «О чудо!», он запустился, после чего я успешно установил ActivePerl.
У вас может быть аналогичная проблема, но при этом отсутствовать другой ключ реестра. Импортировать при этом необходимо те ключи, которых у вас нет.
Выводы
- В итоге я сэкономил себе массу времени — на поиск проблемы и ее устранение ушло не более двадцати минут, зато на переустановку всех программ на моем компьютере ушло бы минимум два дня.
- Не надо спешить переустанавливать Windows по любому чиху. Иногда проблему можно решить довольно просто и быстро.
Спасибо за внимание, я очень надеюсь что статья вам понравилась, жду ваших отзывов, а также с удовольствием отвечу на ваши вопросы.
Читайте также: