Очень часто в своей работе, Вы будете сталкиваться с такой ситуацией.
Перед вами стоит задача, нужно написать программу «Супер Блокнот», которая должна сохранить все функции стандартного блокнота, но при этом иметь ряд каких-то дополнительных функций, благодаря которым, при выборе программы для работы с текстом, пользователь будет отдавать предпочтение именно вашей программе. Для этого было решено добавить несколько новых функций, одна из них, будет отвечать за подсчет и вывод количества слов в тексте.
Через пару недель программа была написана, затем она попала в Интернет, пользователи оценили новый продукт и стали им пользоваться. Цель достигнута.
Проходит время и перед вами ставят новую задачу, написать программу «Супер парсер». Одной из функции данной программы, будет подсчет слов в тексте. Вы понимаете, что снова придется разрабатывать метод, который будет вести подсчёт слов. Но, при этом вспоминаете, что совсем не давно уже разрабатывали программу, в которой применялась данная функция. Чтобы не изобретать велосипед, Вы открываете исходник программы «Супер блокнот» и копируете весь метод в исходник новой программы «Супер парсер». Отлично, теперь Вам не придется тратить время на написание этого метода заново, и Вы можете посветить больше времени остальным элементам программы. Задача решена.
Но, что если метод по подсчету слов, писали не Вы, а допустим, какой-нибудь коллега по работе и по каким-то причинам, Вы не можете получить доступ к исходному коду программы «Супер блокнот». То есть первый вариант, копирование метода из исходника, не прокатит и данный метод придется писать самому ммм… печалька.
Но, тут вам звонит ваш коллега по работе и говорит: «Ты знаешь, я тут вспомнил, когда я разрабатывал данный метод, я подумал, что возможно мне придется его использовать ещё где-то, и по этому я решил вынести его в отдельную сборку, в виде файла динамической библиотеки (dll).Ты просто скопируй этот файл dll
в свой проект, и подключи его, как внешнюю сборку, после чего ты получишь доступ к моему методу и сможешь им пользоваться».
Отлично! Вы проделываете все описанные действия, в программе “Супер парсер” появляется нужный метод, задача решена и вам вновь не пришлось повторно писать код руками.

На этом присказка закончена и теперь переходим к более подробному изучению.
Что такое DLL
DLL (dynamic-link library) — это динамически подключаемая библиотека, или сокращено динамическая библиотека.
Как уже писал ранее, динамические библиотеки, позволяют повторно использовать ранее написанный код, а так же они обеспечивают лучшую переносимость кода. Достаточно, скинуть файл на флешку, или скачать dll файл из Интернета, после чего добавить его в текущий проект и тут же получить набор разных дополнительных функций для вашего приложения. Так же стоит знать, что в одном dll файле может храниться любое количество типов, членов и пространств имён.
Создание файла dll
Для начала выберем тип нового создаваемого приложения, а точнее проекта.
Выбираем Class Library , то есть создаем файл динамической библиотеки (dll)
Так же Вы можете указать, под какую версию Фреймворка будет создаваться данный проект.

После того, как Visual Studio создаст каркас проекта, Вы увидите следующее:
Так будет выглядеть окно Solution Explorer

А так будет выглядеть рабочая область, где Вы обычно пишите код программы

И так дано пространство имён: Car и класс: Class1. Class1 не удачное название, давайте немного изменим наш код, заменив Class1 на BMW, и добавим метод, который будет выводить имя нашего класса.

И так код написан, и теперь необходимо выполнить компиляцию, чтобы получить сборку.
Если сейчас попытаться нажать F5 или Ctrl+F5, то вы увидите данное окно

Данная ошибка, говорит лишь о том, что был создан файл динамической библиотеки (dll
), а не исполняемый файл (exe), который не может быть запущен.
Для того, чтобы скомпилировать проект, нажмите клавишу F6, после чего в директории bin\Debug появиться файл Car.dll.
Чтобы проверить был ли создан файл библиотеки, воспользуйтесь кнопкой на вкладке Solution Explorer

Сборка, в виде файла динамической библиотеки успешно создана.
Теперь перейдем в папку bin\Debug, для того, чтобы быстро переместиться в текущую директорию проекта, в том же Solution Explorer воспользуйтесь пунктом

Скопируйте полученный файл сборки (в нашем случае — это файл Car.dll) в какую-нибудь временную папку. На самом деле, это делать необязательно, Вы можете оставить данный файл в этой папке, но для удобства, создадим новую папку, и поместим туда созданный файл библиотеки.
После чего закроем текущий проект и создадим новый. Но, на этот раз выберем тип проекта — консольное приложение.
Создаем новый проект.

Новый проект создан. Теперь подключим в текущий проект, нашу библиотеку (Car.dll)
Подключение dll
Для этого на папке References , в окне Solution Explorer нужно нажать правую кнопку мыши и выбрать пункт Add Reference, откроется вот такое окно:

- Выберите вкладку Browse
- Укажите папку, в которой лежит файл созданной библиотеки (в нашем примере — Car.dll)
- Выделите файл нужной библиотеки и нажмите кнопку «ОК»
Если всё выполнено, верно, Вы увидите следующую картинку

На ней видно, что в наш текущий проект была успешна, добавлена ссылка на нашу сборку Car.dll, в которой храниться наш код на языке IL. Надеюсь, Вы помните, что после компиляции весь написанный вами код преобразуется в промежуточный код на языке IL (CIL, MSIL — это одно и тоже). А так же видно, что в папку bin\Debug была помещёна копия нашей библиотеки.

Если вдруг Вы забыли, какое пространство имен, типы, или члены содержит ваша созданная библиотека. Вы всегда можете воспользоваться таким инструментом Visual Studio, как . Для этого перейдите на вкладку Solution Explorer, откройте папку References, и просто щёлкните правой кнопкой мыши по добавленной ранее библиотеке, в нашем случае напоминаю — это файл (Car.dll) и выберите пункт View in Object Browser , появиться вот такое окно.

В окне Object Browser можно посмотреть содержимое нашей сборки.
Сборка подключена и теперь Вы можете работать с её содержимым. Далее выполним необязательный пункт.
Добавим, с помощью ключевого слова using пространство имен Car из созданной нами библиотеки Car.dll, после чего создадим объект класса BMW и выполним метод Вывести_Имя_Класса().

Результат:

Всё работает.
И так ещё раз по порядку:
1. Создаем файл динамической библиотеки (dll)
2. Подключаем созданную библиотеку в наш проект, путем добавления в папку References ссылки на наш файл dll.
3. (Необязательный пункт) Подключаем пространство имен из подключенной сборки, с помощью ключевого слова using, либо используем полное наименование, то есть Пространство имён.Тип (Car.BMW).
Эти четыре действия помогут Вам создать библиотеку dll и подключить её к своему проекту.
И в конце не много информации о типах сборок:
Сборки бывают следующих основных видов: общие и частные.
Частная сборка (private assembly)
Это файлы библиотек, как наш ранее созданный файл Car.dll, которые содержаться на протяжении всего времени в каталоге текущего приложения или любом из его подкаталогов.
Вернёмся к началу статьи.
После того, как было создано приложение “Супер парсер”, мы получили сборку в виде файла (exe). Затем мы решили протестировать нашу программу и отдаём её нашему другу, при этом Вы так же упоминаете, что если он хочет иметь дополнительные функции в программе, то ему нужно просто рядом с его exe файлом поместить файл библиотеки Car.dll. После чего он получит возможность подсчёта слов в тексте. То есть библиотека будет храниться в той же директории, что и исполняемый файл.

Общие сборки (shared assembly)
Это сборки, предназначенные для множественного использования разными приложениями, установленными на одном компьютере.
К примеру, у нас есть две программы. Которые будет использовать наш файл Car.dll, чтобы не копировать данный файл в каждую папку, мы можем поместить его в специальное место, которое называется Global Assembly Cache — (GAC) или глобальный кэш сборок. Теперь сборка будет храниться в одном специальном месте, и ваши программа всегда будут знать, где можно найти данную библиотеку кода. Если бы мы воспользовались приватным способом, то нам бы пришлось поместить нашу библиотеку, в каждую папку того приложения, с которым она должна взаимодействовать.

В предложенной статье описано, как можно решить проблему с файлом vcomp110.dll: где и как его скачать для Windows 10 x64 и x86 и куда поместить, чтобы он обнаруживался программами и играми.
Бывает, открытие игры Ведьмак 3 или видео редактора Vegas Pro сопровождается оповещением «Запуск программы невозможен так как отсутствует vcomp110.dll». Данная динамическая библиотека подключается (загружается в оперативную память) только в случае, когда к ней обращается какое-либо приложение, и выгружается из ОЗУ, когда не нужна. Dll-ка является частью дистрибутива Visual Studio и обеспечивает функционирование программ и игр, написанных с применением технологии VS.
Библиотека позволяет разработчикам создать универсальный код и сделать результат его выполнения идентичным для всех поддерживаемых платформ. Vcomp110.dll, например, содержит в себе более 110 функций, необходимых для работы приложений, написанных в новой среде VS 2017.
При запуске программного обеспечения обязательно проверяется наличие требуемых для его функционирования dll-ок и происходит их загрузка в ОЗУ. Когда одного из таких файлов не обнаруживается, срабатывает высоко приоритетное прерывание и работа ПО прекращается. В итоге мы видим сообщение, что из-за отсутствия такого-то dll-файла невозможно запустить программу.
Убрать оповещение и избавиться от конфликта поможет обновление или установка Visual Studio, если компонент на компьютере отсутствует. Теоретически можно поместить vcomp110.dll в системную папку и выполнить его регистрацию, но в таком случае никто не застрахован от появления иных ошибок с другими составляющими пакета.
Быстрый запуск игры
Предлагаем скачать dll-ку с нашего сайта и скопировать в папку назначения, где её ищут все продукты, которым файл требуется, и зарегистрировать в системе. Сперва узнаем, какой разрядности Windows 10 установлена на ПК.
- Жмём Win + Pause или открываем «Свойства» системы через «Параметры».
- В строке, которая обведена на скриншоте, содержатся требуемые сведения.
![]()
У нас это – Windows 10 x64. Данные нужны для загрузки правильного инсталлятора и копирования vcomp110.dll в нужные каталоги.
- Качаем с оригинальным динамически загружаемым компонентом.
- Полученный объект отправляем на анализ в VirusTotal , чтобы убедиться в отсутствии подвоха: перейдя по ссылке, кликаем «Upload & scan file » и выбираем полученный zip.

Так вы дважды защитите себя от вирусов и прочего нежелательного ПО:
- качаете zip-архив, а не исполняемый файл с неизвестным содержимым;
- комплексная проверка десятками антивирусов не позволит внедрить в Windows 10 вредоносный код.
- Правым кликом вызываем команду «Извлечь все… ».

- В окне «Выберите конечную папку » указываем C:\Windows\syswow64 , затем повторяем процедуру и кликаем по директории C:\Windows\system32 для 64-разрядной Windows, для 32-битной выбираем лишь system32 .

- Закрываем все окна и зажимаем клавиши Win + R .
- В текстовой строке выполняем «regsvr32 /u vcomp110.dll »: вводим команду и делаем клик по кнопке «ОК».

Часто такой вариант не проходит, например, когда Visual Studio не установлен. Также может появиться новая ошибка, что файл обнаружен, но он неправильный. Тогда нам поможет загрузка и инсталляция/обновление дистрибутива.
Как вариант, скопируйте vcomp110.dll в директорию с исполняемым файлом (например, D:\Games\Witcher3\bin, а при наличии там библиотеки – удаляем её.
Ставим Visual Studio
Скачиваем установщик, запускаем его и выполняем несколько кликов, а именно:
- Переходим на страницу загрузки Microsoft.
- После выбора языка, если по умолчанию выбран не «Русский », щёлкаем «Скачать » и дожидаемся завершения загрузки

- Запускаем файл и даём добро на его выполнение.

- Отмечаем чекбокс галочкой, принимая все условия использования программного обеспечения, и идём дальше.

- Закрываем инсталлятор и играем.

Иногда завершение установки сопровождается ошибкой 0×80070666. Это значит одно – Visual Studio установлен и не может обновиться, поэтому его нужно обновить принудительно.
- Открываем интерпретатор команд Win + R и выполняем в нём строку vc_redist.x64.exe /layout switch или vc_redist.x86.exe /layout switch соответственно разрядности ОС, где перед названием файла вставляем полный путь к нему (можно скопировать с адресной строки «Проводника» или ввести вручную).

Видео
Вот такое простое решение. Остались вопросы? Смотрите видео или задавайте в комментариях.
Если вы любите много экспериментировать и постоянно что-то устанавливаете из Магазина Windows, а потом удаляете это, то вам скорее всего знакома ситуации, когда необходимо приложение, которым пользовался пару месяцев назад, но сей час не помнишь, какое название оно имело. Именно по этой причине, мы решили рассказать вам, что же из себя на самом деле представляет . Возможно, вы что-то слышали о данной функции, но скорее всего, ее не использовали, а зря!
Преимущество использования функции «Моя библиотека» заключается в том, что с ее помощью вы сможете увидеть список всех приложений и игр, которые вы когда либо устанавливали. Кроме того, не маловажным преимуществом данной функции является и то, что не зависимо от того, что устанавливаемое приложение было бесплатное или же платное, оно все равно будет в вашем списке.
Стоит так же отметить, что для некоторых регионов «Моя библиотека» полезна еще и тем, что она позволит вам отыскать: музыкальные композиции, фильмы и сериалы.
Для того, чтоб перейти в раздел Моя библиотека в Windows 10, вам необходимо использовать пользовательское меню Магазина Windows.
Обратите внимание, что попав на главную страницу «Библиотеки», вы тут же увидите последние приобретенные: приложения, игры, фильмы и музыкальные композиции. Для того, чтоб перейти к более полному списку, необходимо нажать на кнопку «Показать все».
Искать тут установленные, а потом удаленные приложения, невероятно удобно, так как вы будите видеть в списке не просто иконку приложения, но еще и полное его название. Тут же будет присутствовать дата совершенной вами покупки, а так же будет присутствовать функция для повторной установки и возможность скрыть приложение из Библиотеки.

Если искомое вами приложение доступно для установки на используемое в данный момент приложения, вам просто нужно кликнуть по ↓ (Скачать приложение), что автоматически позволит запустить его установку, которую возможность будет отследить даже не выходя из «Библиотеки».
Если же вы используете в данный момент устройство, которое отличается от того, на которое ранее вы устанавливали приложение, тогда необходимо просто кликнуть по ↓ (Скачать приложение) и вы будите автоматически перенаправлены на страницу с приложение в Магазине Windows, где возможно будет найти необходимую для установки версию приложения.
Таким образом, функция «Моя библиотека» в Windows 10 позволяет любому пользователю достаточно быстро производить восстановление сразу нескольких ранее удаленных приложений.
P.S. Если вы используете Магазин Windows достаточно активно и продолжительное время, то вам стоит понимать, что в некоторых ситуациях, на загрузку списка вам может потребоваться несколько минут, так как будет производиться сбор информации, которой может быть достаточно много.
В свое время столкнулся с проблемой создания COM-соединения на стороне сервера. Проблема трудно диагностируется, т.к. код, прекрасно работающий под клиентом отказывается работать на сервере, например, если код исполняет регламентное задание.
Предлагаемая ниже методика позволяет избавиться от описываемой проблемы. К сожалению, после переустановки платформы все возвращается на круги своя и процедуру приходится повторять.
Upd
. Дополнение: если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar),
то такой проблемы не будет. Уставщик позволяет поставить COM-коннектор без установки самого севера. Это полезно, когда приложение реализовано на платформе 8.3, а COM-соединение нужно к базам на 8.2.
За дополнение спасибо brix8x .
Приведен алгоритм настройки системы, со скрином к каждому действию.
2. Регистрация компоненты comcntr.dll
5. Старт сервера 1С. (обязательно:)
Вызываем консоль

Регистрируем компоненту. Компонента отсутствует, если установлен только сервер 1С. Почему-то 1С публикует ее только в составе клиента.

Запускаем службу компонентов. Описывается для Windows Server 2008 R2 Standart.








В ветке Components добавляем новую компоненту comcntr.dll





ВАЖНО!!! После установки нужно немного изменить свойства. Эта тонкость нигде не описана, без нее у меня не работало!






Перезапуск физического сервера
Не раз сталкивался с проблемами в работе службы WMI и ее компонентах. Наличие проблем в подсистеме WMI является критичным с точки зрения нормального функционирования системы, поэтому администратору приходится прибегать к тем или иным трюкам, позволяющим восстановить работоспособность WMI. В этой статье мы опишем достаточно простую методику диагностирования и устранения неполадок в службе WMI.
О наличии проблем с WMI может свидетельствовать широкий спектр ошибок:
- Ошибки обработки WMI запросов в системных журналах и логах приложений
- Ошибки , завязанные на WMI (некорректная работа , и пр.)
- Ошибки в работе / невозможность установки агентов SCCM/SCOM
- Ошибки в работе скриптов (vbs или powershell), использующих пространство имен WMI
В первую очередь нужно проверить имеется ли в системе служба Windows Management Instrumentation (Winmgmt) и включена ли она.
Если служба присутствует и находится в состоянии Started, рекомендуется протестировать работоспособность WMI, обратившись к ней с помощью простого wmi-запроса. С помощью Powershell, например, это можно сделать так:
Get-wmiobject Win32_OperatingSystem
Если при выполнении простейшего WMI-запроса система возвращает ошибку (на скриншоте приведен пример корректного ответа службы WMI), вероятно имеет место некорректное функционирование сервиса WMI или ряда его подсистем, повреждение репозитория WMI или другие проблемы.
Утилита WMIDiag
Для «тонкой» диагностики службы WMI существует официальная утилита Microsoft — WMIDiag (Microsoft WMI Diagnosis). Утилита представляет собой vbs скрипт, который проверяет различные подсистемы WMI и записывает собранную информацию в лог файлы (по умолчанию логи находятся в каталоге %TEMP% — C:\USERS\%USERNAME%\APPDATA\LOCAL\TEMP\ ). Получившийся отчет состоит из файлов, имена которых начинаются с WMIDIAG-V2.1 и включает в себя следующие типы фалов:
- .log файлы содержат подробный отчет об активности и работе утилиты WMIDiag
- .txt файлы содержат итоговые отчеты о найденных ошибках, на которые стоит обратить внимание
- В.csv файлах содержится информация, нужная для долгосрочного анализа работы подсистемы WMI
Совет . В 64 битных версиях Windows wmidiag нужно запускать так:
C:\windows\System32\cscript.exe wmidiag.vbs
в противном случае появится ошибка: WMIDiag must be run from native 64-bit environment. It is not supported in Wow64
. 
После окончания работы утилиты WMIDiag администратор должен изучить полученные файлы логов, проанализировать и попытаться исправить найденные ошибки.
В общем случае, WMIDiag может дать информацию по исправлению частных ошибок в WMI , но в большинстве случаев процесс это довольно трудоемкий и стоит потраченного времени только при решении инцидентов в критичных системах (как правило, на продуктивных серверах). Для массового сегмента рабочих станций пользователей гораздо проще «бить по площадям» и решать проблему работы WMI более радикально.
Перерегистрация библиотек WMI и перекомпиляция mof файлов
Следующий скрипт представляет собой «мягкий» вариант восстановления работоспособности службы WMI на отдельно взятом компьютере (выполняется перерегистрация dll библиотек и службы WMI, перекомпилируются mof файлы). Данная процедура является безопасной и ее выполнение не должно привести к каким-либо новым проблемам с системой.
Sc config winmgmt start= disabled net stop winmgmt cd %windir%\system32\wbem for /f %%s in ("dir /b *.dll") do regsvr32 /s %%s wmiprvse /regserver winmgmt /regserver sc config winmgmt start= auto net start winmgmt for /f %%s in ("dir /b *.mof") do mofcomp %%s for /f %%s in ("dir /b *.mfl") do mofcomp %%s
Указанные команды можно выполнить путем простой вставки в окно командой строки, либо сохранить код в bat файле и запустить его с правами администратора. После окончания работы скрипта, систему нужно перезагрузить и вновь проверить работу WMI.
Пересоздание репозитория (хранилища) WMI
В том случае, если предыдущий способ не помог, придется перейти к более «жесткому» способу восстановления работоспособности службы WMI, заключающегося в пересоздании хранилища.
WMI репозиторий (хранилище) находится в каталоге %windir%\System32\Wbem\Repository и представляет собой базу данных, в которой содержится информация о метаданных и определениях WMI классов. В некоторых случаях репозитория WMI может содержать статическую информацию классов. При повреждении репозитория WMI, в работе службы Windows Management Instrumentation (Winmgmt) могут наблюдаться ошибки вплоть до полной невозможности ее запустить.
В том случае, если вы подозреваете, что репозиторий WMI поврежден, имейте в виду, что его пересоздание это последняя вещь, к которой нужно прибегнуть только в том случае, если никакие другие операции реанимировать WMI не помогают.
Совет . На практике бывают случаи, когда пересоздание хранилища WMI приводит к проблемам со сторонним софтом. Вызван этот эффект тем, что все записи в базе WMI обнуляются (до состояния чистой системы). Такое ПО, вероятно, придется переустанавливать в режиме восстановления.
В Windows Vista и выше проверить целостность репозитория WMI можно с помощью команды:
Winmgmt /verifyrepository
Если команда возвращает, что база данных WMI находится в неконсистентном состоянии (INCONSISTENT), стоит попробовать выполнить «мягкое» восстановление репозитория:
Winmgmt /salvagerepository
И перезапустить службу wmi:
Net stop Winmgmt net start Winmgmt
Если описанная выше команда не помогла, выполняем сброс репозитория на начальное состояние (hard reset) так:
Winmgmt /resetrepository
В том случае, если команды Winmgmt /salvagerepository и Winmgmt /resetrepository желаемого эффекта не дали, стоит попробовать выполнить «жесткое» пересоздание базы WMI вручную таким сценарием:
Sc config winmgmt start= disabled net stop winmgmt cd %windir%\system32\wbem winmgmt /kill winmgmt /unregserver winmgmt /regserver winmgmt /resyncperf if exist Repos_bakup rd Repos_bakup /s /q rename Repository Repos_bakup regsvr32 /s %systemroot%\system32\scecli.dll regsvr32 /s %systemroot%\system32\userenv.dll for /f %%s in ("dir /b *.dll") do regsvr32 /s %%s for /f %%s in ("dir /b *.mof") do mofcomp %%s for /f %%s in ("dir /b *.mfl") do mofcomp %%s sc config winmgmt start= auto net start winmgmt wmiprvse /regserver
Данный скрипт полностью пересоздает хранилище WMI (старый репозитория сохраняется в каталоге Repos_bakup). После окончания работы скрипта компьютер нужно перезагрузить, после чего протестировать работу службы WMI простым запросом.
В этой статье мы собрали типовые методики позволяющие устранить неполадки в работе службы WMI и ее подсистемах.