12

一个奇怪的错误:

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

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

我找到了解决方案,并将很快回答我自己的问题,以便人们在遇到相同问题时可以找到解决方案。

4

6 回答 6

24

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

现在问题是(这是解决问题令人头疼的原因)有时,如果 Visual Studio 无法创建 OCX,您将无法在 OCX 上运行 Dependency Walker。所以你永远不会发现丢失的 DLL 是问题所在。

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

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

于 2012-05-07T05:33:43.343 回答
8

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

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

于 2014-05-30T00:51:30.673 回答
5

我尝试使用以“管理员”身份运行 VS 2015,它能够解决问题

于 2017-02-18T11:18:45.567 回答
3

MSB8011 似乎是 regsvr32 遇到问题时引发的一般错误。就我而言,当每用户注册设置为“是”时,regsvr32 以代码 4 退出,但我正在构建的 DLL 没有定义 DllInstall 入口点。

于 2013-03-04T19:14:04.633 回答
2

您也可以通过 VS 2013 IDE 执行此操作,方法是从程序文件快捷方式启动此 IDE,选择 Visual Studio 2010/2013,然后右键单击并选择以管理员身份运行,在 IDE 启动后,然后打开您的解决方案文件并构建它,您将永远不会由于 regsrv32 DLL/COM 注册而出现此类错误

于 2015-02-27T12:52:44.893 回答
1

Property页面上转到

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

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

修改前:

修改前

修改后:

修改后

于 2016-05-09T04:18:27.903 回答