您的位置:首页 > 其它

virtualBox(Genymotion)中不能启动虚拟机可能与oleaut32.dll有关

2016-02-20 00:00 706 查看
摘要: Genymotion virtualBox 创建 COM 对象失败可能与oleaut32.dll在注册表中的路径不正确有关

今天要使用安卓模拟器Genymotion,下载安装后,Genmotion提示不能启动虚拟引擎 virtualbox,上网查了一下,很快解决了。

我的机器是win7 64位,将virtualBox安装目录下的VirtualBox.exe的属性的兼营性设置为“以兼容模式运行这个程序”,选择除win7之外的兼容模式即可。同时还要将genymotion安装目录下的genymotion.exe也要设置为以兼容模式运行。

这一步在网上很好找。

接下genymotion添加虚拟设备也很顺利,启动虚拟设备时报错了,它提示我用virtualBox直接启动虚拟设备查看错误原因。打开virtualBox,发现已经添加了一个虚拟设备,这就是genymotion自动向virtualBox添加的虚拟机。启动此虚拟设备时报错:

Failed to create the VirtualBoxClient COM object. The application will now terminate. Callee RC: REGDB_E_CLASSNOTREG (0x80040154) 

VirtualBox遇到错误:创建 COM 对象失败. 应用程序将被中断. 被召者 RC:REGDB_E_CLASSNOTREG (0x80040154)
网上查到两个方法
方案一:

1) 打开CMD命令

2) 进入VirtualBox安装目录:
"cd X:\Program Files\VirtualBox"
3) 运行命令: "VBoxSVC /ReRegServer"

4) 运行命令: regsvr32 VBoxC.dll

方案二:

鼠标右键点击VirtualBox属性,在兼容性选项中
勾选兼容性模式运行这个程序,下拉选择 Windows Server 2008 (Service Pack 1)
勾选以管理员身份运行此程序

这两个方法我都试了,将virtualBox重装,换较低的版本安装,将两种方法组合运行,不管怎样,在运行虚拟机时还是会报错。这样一直折腾了一个下午还是没有解决。

到了晚上,我检查了virtualBox的日志文件C:\Users\Administrator\.VirtualBox\VBoxSVC.log

发现一段话:

00:00:06.964398 ERROR [COM]: aRC=VBOX_E_OBJECT_NOT_FOUND (0x80bb0001) aIID={f30138d4-e5ea-4b3a-8858-a059de4c93fd} aComponent={SessionMachine} aText={No storage device attached to device slot 1 on port 1 of controller 'IDEController'}, preserve=false aResultDetail=0
00:00:06.965398 ERROR [COM]: aRC=VBOX_E_OBJECT_NOT_FOUND (0x80bb0001) aIID={f30138d4-e5ea-4b3a-8858-a059de4c93fd} aComponent={SessionMachine} aText={No storage device attached to device slot 1 on port 1 of controller 'IDEController'}, preserve=false aResultDetail=0
这说明是ID={f30138d4-e5ea-4b3a-8858-a059de4c93fd}的组件加载时出错,打开注册表编辑器,查找={f30138d4-e5ea-4b3a-8858-a059de4c93fd},发现它下面有一项ProxyStubClsid32,对应的ID 是{00020424-0000-0000-C000-000000000046},再在HKEY_CLASSES_ROOT\CLSID查这一项,发现{00020424-0000-0000-C000-000000000046}对应的默认值是oleaut32.dll,而oleaut32.dll显然是和对象的自动化有关,

C:\Windows\system32\果然找到了oleaut32.dll,会不会是这个dll不能正常加载呢,

同时以关键字“oleaut32.dll virtualbox”上网搜索,果然发现了一篇virtualBox的相关文献:https://www.virtualbox.org/ticket/12087

其中一段话提到:

I found a solution that worked for me after comparing two ProcMon Traces of a working and a broken installation:
HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}\InprocServer32 and
HKEY_CLASSES_ROOT\CLSID\{00020424-0000-0000-C000-000000000046}\InprocServer32

The (Default) entry said "oleaut32.dll". After changing that to "C:\Windows\system32\oleaut32.dll" in both locations it worked again!

这和我的想法正好一致,原因很可能是oleaut32.dll不能正常加载。将这两项中的oleaut32.dll值改为绝对路径后。再打开virtualBox,启动虚拟机就一切正常了,

再用genymotion启动android模拟器也正常了。

总结一下:

解决virtaulBox虚拟机碰到不能创建com对象的错误要做三方面的工作

1,virtualBox与win7的兼容性问题

2,VBoxC.dll的注册问题

3,oleaut32.dll在注册表中的路径问题。

在网上搜索virtaulBox虚拟机碰到不能创建com对象问题时只能找到前两点,第3点不能直接找到,有人在网上留言说用了前两个方法,还是没有解决问题,很可能是第3点没有做到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: