解决错误MSB8011:无法注册输出

时间:2012-05-07 05:31:42

标签: visual-studio-2010 activex openscenegraph

一个奇怪的错误:

  

错误MSB8011:无法注册输出。请尝试启用Per-user   使用命令提示符重定向或注册组件   提升权限。 C:\ PROGRAM   Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppCommon.targets 744

尝试在ActiveX控件中使用OpenSceneGraph(OSG)时出现此错误。谷歌搜索显示各种解决方案并没有真正解决问题或找出错误的确切原因,所以我想把解决方案放在一个地方:这里。

我找到了解决方案,很快就会回答我自己的问题,以便人们在遇到同样的问题时能找到他们的解决方案。

6 个答案:

答案 0 :(得分:21)

当Visual Studio(2010)无法找到程序创建OCX所需的从属dll文件时,会发生此错误。 OCX是在项目的Debug目录中创建的(对于Debug版本),并且指定“工作目录”(在项目设置中)作为依赖DLL的文件夹,将无法帮助Visual Studio找到DLL。 / p>

现在抓住了(这就是解决问题的难题),有时候,如果没有Visual Studio能够创建OCX,你将无法在OCX上运行Dependency Walker。所以你永远不会发现丢失的DLL是问题所在。

如果您知道哪个DLL需要放在Debug文件夹中,只需将它们放在那里,错误就会消失。 如果您不知道,并且您的OCX未创建,请转到项目设置>链接器>一般>注册输出 并将值设置为“否”。这将为您创建OCX,但不会完成注册过程,即需要依赖DLL的过程。

双击OCX后,Dependency Walker会显示缺少的带有黄色圆圈图标的DLL,只需将这些DLL放在与OCX相同的文件夹中,您的程序就能正常运行。就这么简单。

答案 1 :(得分:7)

问题可能是您的项目尝试注册COM对象,但没有足够的权限来执行此操作。在Windows 7和8上,regsvr32需要管理权限。

您可以做的是以下内容。在桌面上创建一个快捷方式到C:\ Windows \ SysWOW64 \ cmd.exe(32位控制台)。右键单击,属性 - >高级 - >选中以管理员身份运行启动快捷方式,确保弹出“用户访问控制”,然后单击“是”。从这个特殊的控制台窗口开始构建。

答案 2 :(得分:1)

当regsvr32遇到问题时,MSB8011似乎是一个通用错误。在我的情况下,当每用户注册设置为“是”时,regsvr32退出代码4,但我正在构建的DLL没有定义DllInstall入口点。

答案 3 :(得分:1)

您也可以通过VS 2013 IDE从程序文件快捷方式启动此IDE,选择Visual Studio 2010/2013然后右键单击并选择以管理员身份运行,在IDE启动后,然后打开解决方案文件并构建它,也可以通过VS 2013 IDE执行此操作因为regsrv32 DLL / COM注册

,你永远不会得到这样的错误

答案 4 :(得分:1)

Property页面上转到

  

配置属性 - >构建事件 - >构建后事件

您可能将其称为/Service。修改如下所示的选项可能有所帮助。

修改前:

Before modification

修改后:

After modification

这对我很有帮助,希望它对你也有帮助。

答案 5 :(得分:1)

我尝试使用run as" Administrator" VS 2015,它能够解决问题