- Regsvr32
- История распределенного кода
- Линейное программирование
- Процедуры (функции)
- Оверлеи
- Прерывания
- Динамические библиотеки
- Компонентная объектная модель (COM)
- Выскакивает C:\Windows\System32\cmd.exe как убрать командную строку
- Причины возникновения
- К чему может привести игнорирование ошибки?
- Алгоритм решения проблемы
- Выводы
- Как зарегистрировать DLL в Windows
- Три способа регистрации DLL в ОС
- Почему не удается зарегистрировать DLL
Regsvr32
Regsvr32 (Microsoft Windows Register Server) — это системная утилита, предназначающаяся для регистрации и отмены регистрации элементов управления ActiveX , компонентов фильтров (кодеков) и компонентов библиотек DLL в системе Windows посредством внесения изменений в реестр.
История распределенного кода
Не лишним тут, я думаю, будет познакомиться с историей распределенного кода, что даст нам понимание причин возникновения и развития динамических библиотек. А это, в свою очередь, даст очевидное представление о том, какой функционал несет в себе средство regsvr32 и для чего оно, собственно, предназначается.
Линейное программирование
На заре развития языков программирования, при создании (разработке) программ использовался так называемый линейный подход, который заключался в том, что код писался/выполнялся «сверху-вниз», в четкой последовательности от начала к концу. Но как только человек научился писать код чуть сложнее, чем простой вывод фразы «Hello, World!», перед ним тут же встало несколько проблем, которые показали, что подход имеет очевидные недостатки:
- исходный код необходимо было копировать из старого проекта в новый;
- копирование старого кода приводило к ошибкам, путанице, нестыковкам, необходимости исправления и подгонки под новый проект;
Процедуры (функции)
Стояла очевидная проблема разделения, а так же многократного использования кода. Поэтому, по мере развития технологий программирования появилось процедурное (функциональное) программирование, которое было основано на том, что области кода выделялись в отдельные блоки под названием функции (процедуры), к которым имелась возможность многократного обращения (вызова) из любого места программы. Это существенно упростило архитектуру приложения, решило важную проблему дублирующегося кода, поскольку теперь вместо того, чтобы программе использовать повторяющиеся участки кода на протяжении всего процесса выполнения, проще разместить его в отдельной процедуре (функции) и многократно вызывать [по мере необходимости]. Тем не менее, данный подход требовал доработки, поскольку:
- позволял разделять код программы на логические части лишь в рамках одной языковой среды разработки.
Оверлеи
В условиях дороговизны оперативной памяти и отсутствия у многих операционных систем того времени (MSDOS) механизма виртуализации адресного пространства процесса (виртуальной памяти), обеспечивающего достаточное адресное пространство для приложений, появилась необходимость загружать в ограниченное пространство [дорогой] физической памяти много превосходящие по размеру код/данные приложений. Следствием всего этого явилось разбиение кода/данных программы на обособленные модули, получившие название оверлеев (overlay). Данный механизм непрямую не связан с разделением кода, тем не менее мы о нем упомянем, как о существенной вехе в развитии механизмов разделения кода.
Прерывания
Первой попыткой решения проблемы распределения кода был механизм программных прерываний, который позволял создавать (размещать в микрокоде BIOS) и вызывать сервисы, доступные любым операционным системам и программам. Таблица прерываний включала 255 векторов (адресов), каждый из которых задавал процедуру обслуживания определенного прерывания. Данный сервис мог лешгко программироваться пользователями, то есть любая программа могла [пере]назначить одно из доступных программных прерываний, предоставив, таким образом, общесистемный сервис. И не смотря на все положительные стороны подобного подхода, он имел и ряд серьёзных недостатков:
- Фиксированное количество сервисов, ограниченное размером таблицы векторов прерываний (255);
- Отсутствие обработки исключительных ситуаций.
- Отсутствие системы безопасности;
- Обособленный синтаксис, несовместимости с синтаксисом языков высокого уровня (необходимость оперировать низкоуровневыми регистрами);
- Отсутствие контроля типов и корректности данных;
Динамические библиотеки
Дальнейшее развитие данной концепции (а так же развитие ОС) привело к появлению динамически загружаемых библиотек (называемых упрощенно динамическими библиотеками, DLL). Отличительной особенностью было то, что обращение к функционалу этих библиотек могло осуществляться из кода на любых языках и из любых средств разработки [в рамках операционной системы]. На механизме динамических библиотек построен весь программный интерфейс (WinAPI) операционных систем Mirosoft Windows, поэтому любое API, любой сервис, так или иначе базируются на DLL. Характерная особенность динамической библиотеки заключается в том, что она может использоваться сразу несколькими приложениями, а система обеспечивает присутствие в памяти всего-лишь одного экземпляра [кода] динамической библиотеки для всех приложений, которые содержат ссылки на функции данной библиотеки. DLL имели ряд выраженных недостатков:
- при загрузке динамической библиотеки [в адресное пространство процесса] использовалось лишь её символическое имя, поскольку отсутствовал механизм устойчивой идентификации необходимых библиотек, соответственно:
- в подгруженной библиотеке [сторонней/не той версии] мог содержаться код, разрушающий структуры данных и кода вызывающего приложения.
- подгружаемая библиотека [сторонняя/не той версии] могла использовать контекст безопасности основного приложения для получения доступа к ресурсам, к которым в обычных условиях доступа у нее нет.
- не проверяется информация о типах параметров функции;
- не проверяется корректность передаваемых параметров функции;
Компонентная объектная модель (COM)
Следующим этапом развития концепции разделяемого кода стало появление компонентной объектной модели (COM, Component Object Model). COM обеспечивал возможность разделять код на отдельные независимые компоненты. Упомянутые компоненты, в отличие от предыдущих своих собратьев, подключались уже не по имени файла, а при помощи специального глобального идентификатора (GUID). GUID ни что иное как 128-битный глобальный идентификатор (GUID, Global Unique ID), идентифицирующий конкретный объект класса библиотеки. Каждый компонент определялся в системе собственным уникальным идентификатором, а в системе хранилась единая база информации по компонентам, в которой содержалась вся информация: начиная от имени файла, в котором расположен сам компонент, и заканчивая сетевыми настройками.
База COM хранится в реестре, в разделе HKEY_CLASSES_ROOT :
- HKEY_CLASSES_ROOT\CLSID — GUID идентификаторов классов компонентов;
- HKEY_CLASSES_ROOT\Interface — IID идентификаторов интерфейсов (для реализующих их компонентов);
- HKEY_CLASSES_ROOT\TypeLib — Информация о файлах, в которых хранятся библиотеки;
Причем сам HKEY_CLASSES_ROOT представляет собой комбинацию разделов HKCU\Software\Classes (для текущего пользователя) и HKLM\Software\Classes (для машины в целом).
Примером значения CLSID может служить строка вида <2db47ae5-cf39-43c2-b4d6-0cd8d90946f4>. В глобальном смысле данные уникальные номера «не повторяются» и уникально идентифицируют компоненты системы, что говорит нам об уникальности объекта класса библиотеки в пределах системы. Подразделами в этих ветках реестра могут быть:
Выскакивает C:\Windows\System32\cmd.exe как убрать командную строку
Иногда при включении компьютера во время чтения приложений в автозапуске открывается окно командной строки с определенной командой. В этом случае пользователь закономерно задается вопросом: «Windows system32 cmd exe — что это и чем грозит подобное поведение системы?» Такая проблема довольно часто встречается, и в статье пойдет речь о том, как определить виновника события и разрешить ситуацию в свою пользу.
Причины возникновения
Панель интерпретатора командной строки, неожиданно появляющаяся после загрузки ОС, может быть свидетельством изменения некоторых системных настроек сторонними приложениями. Но это не единственная причина его появления на рабочем столе.
Краткий перечень факторов помещения cmd exe windows в автозапуск:
- Спланированное включение некоторых функций установленных программ или официальных обновлений.
- Включение любого стороннего приложения, установленного пользователем.
- Работа вирусных утилит или попытка системы восстановить поврежденные файлы.
У некоторых пользователей черное окно CMD открывается в ситуации:
- Отображения рабочего стола и чтения всех висящих в автозагрузке программ. Если мощности процессору не хватает, то командная строка может ненадолго задержаться ввиду активации определенных сегментов кода.
- Когда осуществляется какая-нибудь работа с системой. В этом случае следует винить вредоносное ПО, что загружается из сети.
К чему может привести игнорирование ошибки?
Если задействованы встроенные утилиты или программы, которым можно доверять, опасаться нечего. Исправить проблему на слабом ПК можно только посредством его апгрейда. Для примера, в десятой версии Windows часто встречаются подобные баги, так как система особо требовательна к ресурсам компьютера.
Но если же причиной запуска системной утилиты стал вирус, то определенно можно ждать полного выхода из строя всей файловой системы. Для избавления от «черного окна» следует предпринять несколько простых действий.
Алгоритм решения проблемы
Для начала стоит провести диагностику ОС посредством встроенных утилит:
- Запускаем консоль «Выполнить» при помощи комбинации Win+R и вводим строку msconfig.
- После этого появляется окно «Конфигурации», в котором нужно отметить пункт «Диагностический запуск».
- Перезагружаем систему.
Если после безопасного входа строка с надписью system32 на черной панели снова выскакивает, то, вероятно, за это отвечает определенный системный процесс. Когда в область Start прописывается вредоносный код, после диагностического запуска окно cmd.exe не включается автоматически.
Чтобы избавиться от ошибки, стоит для начала очистить системный реестр и директории от лишнего мусора, накопившегося вследствие действий пользователя:
- Лучшей утилитой для этой процедуры является CCleaner. Скачать программу можно с официального ресурса.
- После установки и запуска приложения нужно перейти в раздел «Очистки», проверить систему на ошибки и убрать все отметки посредством поля «Исправить избранное».
- После этого следует проверить реестр в соответствующем меню.
- В раздел Сервис — Автозагрузка помещены все записи о программах, которые автоматически стартуют вместе с Windows. Все подозрительные приложения стоит отключить.
- Для закрепления лечения можно провести полную проверку ОС на вирусы с помощью простеньких в использовании утилит AdwCleaner и MalwareBytes.
Владельцам десятки позволено решать подобные проблемы через командную строку:
- Консоль следует запускать от имени админа, иначе некоторые функции будут недоступны.
- Нужно ввести команду sfc/scannow и нажать Enter.
- Данная утилита регистрирует все изменения в системных файлах и позволяет загружать исправления через сетевые протоколы.
Также можно использовать оснастку «Планировщика задач», если окно командной строки постоянно маячит на рабочем столе и мешает работе:
- В меню «Выполнить» нужно ввести taskschd.msc для запуска утилиты.
- В разделе «Библиотека» находится полный список запланированных на определенное время задач.
- Для дезактивации записей нужно выделить их кнопкой мыши и нажать на пункт «Отключить» в правом меню.
- Если же при выборе пункта возникают сомнения касательно его реальных функций, стоит обратиться к интернету за справкой.
Выводы
Строгое следование инструкции должно помочь. Но случается и так, что спустя некоторое время cmd.exe снова вылезает на рабочий стол. В данном случае стоит обратиться к специалистам в сервисный центр Microsoft, приложив к письму подробный отчет о сложившейся ситуации.
В статье мы лишь частично изложили материал по тому, как удалить определенную запись в автозапуске. Для борьбы с некоторыми видами зловредных кодов понадобятся углубленные знания по работе системы и эксплуатации программных комплектов. Но в большинстве случаев вышеизложенного алгоритма вполне достаточно для исправления указанного бага.
Как зарегистрировать DLL в Windows
Пользователи спрашивают о том, как зарегистрировать dll файл в Windows 7 и 8. Обычно после того, как столкнулись с ошибками наподобие «Запуск программы невозможен, так как нужная dll отсутствует на компьютере». Об этом и поговорим.
На самом деле, регистрация библиотеки в системе не такая уж и сложная задача (покажу целых три вариации одного способа) — по сути, необходим лишь один шаг. Единственное обязательное требование — наличие у вас прав администратора Windows.
Однако есть некоторые нюансы — например, даже успешная регистрация DLL не обязательно избавляет вас от ошибки «библиотека отсутствует на компьютере», а появление ошибки RegSvr32 с сообщением о том, что модуль не совместим с версией Windows на этом компьютере или точка входа DLLRegisterServer не найдена, не говорит о том, что вы что-то делаете не так (о чем это говорит разъясню в конце статьи).
Три способа регистрации DLL в ОС
Описывая дальнейшие шаги, я исхожу из того, что вы нашли, куда нужно скопировать вашу библиотеку и DLL уже лежит в папку System32 или SysWOW64 (а возможно, где-то еще, если ей там следует находиться).
Примечание: ниже будет описано, как зарегистрировать DLL библиотеку с помощью regsvr32.exe, однако обращаю ваше внимание на то, что если у вас 64-разрядная система, то у вас есть два regsvr32.exe — один в папке C:\Windows\SysWOW64, второй — C:\Windows\System32. И это разные файлы, причем 64-бит находится в папке System32. Рекомендую в каждом из способов использовать полный путь к regsvr32.exe, а не просто имя файла, как у меня показано в примерах.
Первый способ описывается в Интернете чаще других и состоит в следующем:
- Нажмите клавиши Windows + R или в меню Пуск Windows 7 выберите пункт «Выполнить» (если, конечно, у вас включено его отображение).
- Введите regsvr32.exe путь_к_файлу_dll
- Нажмите Ок или Enter.
После этого, если все прошло успешно вы должны будете увидеть сообщение о том, что библиотека была успешно зарегистрирована. Но, с большой вероятностью увидите другое сообщение — Модуль загружен, но точка входа DllRegisterServer не найдена и стоит проверить, что ваша DLL является правильным файлом (об этом, как я уже говорил, напишу позже).
Второй способ состоит в запуске командной строки от имени администратора и ввода все той же команды из предыдущего пункта.
- Запустите командную строку от имени Администратора. В Windows 8 можно нажать клавиши Win+X, а затем выбрать нужный пункт меню. В Windows 7 вы можете найти командную строку в меню Пуск, кликнуть по ней правой кнопкой мыши и выбрать пункт «Запуск от имени администратора».
- Введите команду regsvr32.exe путь_к_библиотеке_dll (пример вы можете видеть на скриншоте).
Опять же, вероятно, что вам не удастся зарегистрировать DLL в системе.
И последний способ, который также может пригодиться в некоторых случаях:
- Кликните правой кнопкой мыши по DLL, которую нужно зарегистрировать и выберите пункт меню «Открыть с помощью».
- Нажмите «Обзор» и найдите файл regsvr32.exe в папке Windows/System32 или Windows/SysWow64, откройте DLL с помощью него.
Суть всех описанных способов зарегистрировать DLL в системе одна и та же, просто несколько разные способы запуска одной и той же команды — кому что удобнее. А теперь о том, почему у вас ничего не получается.
Почему не удается зарегистрировать DLL
Итак, у вас отсутствует какой-то файл DLL, из-за чего при запуске игры или программы вы видите ошибку, вы скачали этот файл из Интернета и пробуете зарегистрировать, но либо точка входа DllRegisterServer, либо модуль не совместим с текущей версией Windows, а может и что-то еще, то есть регистрация DLL невозможно.
Почему это происходит (далее будет и про то, как это исправить):
- Не все файлы DLL предназначены для того, чтобы их регистрировали. Для того, чтобы его можно было зарегистрировать данным способом, он должен иметь поддержку той самой функции DllRegisterServer. Иногда ошибка бывает также вызвана тем, что библиотека уже зарегистрирована.
- Некоторые сайты, предлагающие скачать DLL, содержат по факту, файлы-пустышки с искомым вами именем и их невозможно зарегистрировать, так как на самом деле это не библиотека.
А теперь о том, как это исправить:
- Если вы программист и регистрируете свою DLL, попробуйте regasm.exe
- Если вы пользователь и у вас что-то не запускается с сообщением о том, что DLL отсутствует на компьютере — поищите в Интернете, что это за файл, а не где его скачать. Обычно, зная это, вы можете скачать официальный установщик, который установит оригинальные библиотеки и зарегистрирует их в системе — например, для всех файлов с именем, начинающегося с d3d достаточно поставить DirectX с официального сайта Microsoft, для msvc — одну из версий Visual Studio Redistributable. (А если не запускается какая-то игра с торрента, то загляните-ка в отчеты антивируса, он мог удалить нужные DLL, это часто бывает с некоторыми модифицированными библиотеками).
- Обычно, вместо регистрации DLL срабатывает размещение файла в одной папке с исполняемым файлом exe, который требует эту библиотеку.
На этом завершаю, надеюсь, что-то стало более ясно, чем было.
А вдруг и это будет интересно:
Почему бы не подписаться?
Рассылка новых, иногда интересных и полезных, материалов сайта remontka.pro. Никакой рекламы и бесплатная компьютерная помощь подписчикам от автора. Другие способы подписки (ВК, Одноклассники, Телеграм, Facebook, Twitter, Youtube, Яндекс.Дзен)
07.07.2020 в 13:27
Здравствуйте. Скачал из Стима игру, и столкнулся с ошибкой, связана она с файлом msvcrt. dll. Попробовал все указанные вами способами, а после попробовал установить Microsoft C++, но это все равно не помогло. Что мне делать?
07.07.2020 в 14:49
А установили и X86 и X64 версии (нужны обе). Нужного года?