Решение ошибки MSB8011: Ошибка регистрации вывода

Странная ошибка:

Ошибка MSB8011: Ошибка регистрации вывода. Попробуйте включить пользователя Per-user Переназначить или зарегистрировать компонент из командной строки с помощью повышенные разрешения. C:\Program Файлы \MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 744

Я получил эту ошибку при попытке использовать OpenSceneGraph (OSG) в элементе управления ActiveX. Поиск Google показал всевозможные решения, которые на самом деле не помогли решить проблему или не нашли точную причину ошибки, поэтому я хотел бы разместить решение в одном месте: здесь.

Я нашел решение для этого и вскоре отвечу на мой собственный вопрос, чтобы люди могли найти свое решение, если они столкнулись с одной и той же проблемой.

Ответ 1

Эта ошибка возникает, когда Visual Studio (2010) не может найти зависимые файлы dll, необходимые программе для создания OCX. OCX создается в каталоге Debug проекта (для отладочных построек) и указывая "Рабочий каталог" (в настройках проекта) в качестве папки, в которой находится зависимая DLL, не поможет Visual Studio в поиске DLL.

Теперь уловка (это то, что делает головную боль для решения проблемы), что иногда, если Visual Studio не может создать OCX, вы не сможете запустить Dependency Walker в OCX. Поэтому вы никогда не узнаете, что недостающая DLL является проблемой.

Если вы знаете, какая DLL должна быть помещена в папку Debug, просто разместите их там, и ошибка исчезнет. Если вы не знаете, и если ваш OCX не создан, перейдите к настройкам проектa > Linker > General > Register Output и установите значение "Нет". Это создаст для вас OCX, но не будет проходить процесс регистрации, то есть когда ему нужны зависимые DLL.

Как только вы дважды щелкните OCX и Dependency Walker, вы увидите недостающую DLL с желтыми значками круга, просто поместите эти DLL в ту же папку, что и OCX, и ваша программа будет работать нормально. Это просто.

Ответ 2

Проблема может заключаться в том, что ваш проект пытается зарегистрировать COM-объект, но для этого недостаточно прав. В Windows 7 и 8 для regsvr32 требуются административные разрешения.

Что вы можете сделать, так это следующее. Создайте ярлык на рабочем столе C:\Windows\SysWOW64\cmd.exe(32-разрядная консоль). Щелкните правой кнопкой мыши, Свойства → Дополнительно → выберите Запуск от имени администратора. Запустите ярлык и убедитесь, что установлен User Access Control, и нажмите "Да". Начните строить из этого специального окна консоли.

Ответ 3

MSB8011, кажется, является общей ошибкой, возникающей всякий раз, когда regsvr32 сталкивается с проблемой. В моем случае regsvr32 вышел с кодом 4, когда для регистрации для каждого пользователя было установлено значение "Да", но DLL, которую я строил, не определяла точку входа DllInstall.

Ответ 4

Вы также можете сделать это через ID 2013 IDE, запустив эту среду IDE из ярлыка программных файлов, выберите Visual Studio 2010/2013, а затем щелкните правой кнопкой мыши и выберите "Запуск от имени администратора" после запуска IDE, затем откройте файл решения и создайте его, вы никогда не получите таких ошибок из-за регистрации regsrv32 DLL/COM

Ответ 5

На странице Property перейдите к

Свойства конфигурации- > События сборки- > Событие после сборки

вы можете ссылаться на него как на /Service. Могут быть изменены варианты, как показано ниже.

Перед изменением:

Before modification

После модификации:

After modification

Это помогло мне, надеюсь, что это тоже поможет.

Ответ 6

Я попытался использовать run как "Администратор" VS 2015, он смог решить проблему