Visual studio 2010 解决错误MSB8011:注册输出失败

Visual studio 2010 解决错误MSB8011:注册输出失败,visual-studio-2010,activex,openscenegraph,Visual Studio 2010,Activex,Openscenegraph,一个奇怪的错误: 错误MSB8011:注册输出失败。请尝试按用户启用 使用从命令提示符重定向或注册组件 提升权限。C:\程序 文件\MSBuild\Microsoft.Cpp\v4.0\Microsoft.cppcomon.targets 744 我在ActiveX控件中尝试使用OpenSceneGraph(OSG)时遇到此错误。谷歌搜索显示了各种各样的解决方案,它们并没有真正解决问题,也没有找到错误的确切原因,所以我想把解决方案放在一个地方:这里 我找到了解决方案,不久将回答我自己的问题,以便

一个奇怪的错误:

错误MSB8011:注册输出失败。请尝试按用户启用 使用从命令提示符重定向或注册组件 提升权限。C:\程序 文件\MSBuild\Microsoft.Cpp\v4.0\Microsoft.cppcomon.targets 744

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


我找到了解决方案,不久将回答我自己的问题,以便人们在遇到相同问题时能够找到解决方案。

当Visual Studio(2010)无法找到创建OCX程序所需的依赖dll文件时,会发生此错误。OCX是在项目的调试目录(用于调试生成)中创建的,将“工作目录”(在项目设置中)指定为从属DLL所在的文件夹将无助于Visual Studio定位DLL

现在的问题是(这是解决问题的一个难题)有时候,如果Visual Studio无法创建OCX,您将无法在OCX上运行Dependency Walker。因此,您永远不会发现丢失的DLL是问题所在

如果您知道需要将哪个DLL放在调试文件夹中,只需将它们放在那里,错误就会消失。 如果您不知道,并且没有创建OCX,请转到项目设置>链接器>常规>注册输出 并将该值设置为“否”。这将为您创建OCX,但不会经历注册它的过程,这是在它需要依赖DLL的时候


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

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

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


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

您也可以通过VS 2013 IDE来实现这一点,方法是从程序文件快捷方式启动此IDE,选择Visual Studio 2010/2013,然后右键单击并选择以管理员身份运行,在启动IDE后,打开解决方案文件并构建它,由于在
属性
页面上注册了regsrv32 DLL/COM,您将永远不会收到此类错误。请转到

配置属性->生成事件->生成后事件

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

修改前:

修改后:


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

非常有用。获得一个内置的OCX并使用dependency walker帮助我发现了这个问题-结果是我没有它所依赖的64位文件(找到了具有不同CPU类型的模块)。是否可以在不将DLL复制到调试目录的情况下执行此操作?我宁愿指定另一个包含dll的目录,就像它用来查找库的附加库目录属性一样。这是一个常见的问题。甚至我都想要一个解决方案:我和这些家伙也遇到了这个错误,由于这篇文章,我可以确定问题是由于缺少依赖DLL而发生的……非常感谢……这为我获得了一个普通ActiveX控件项目构建。我正在使用VS2019。