在VirtualBox

时间:2016-03-26 16:28:54

标签: python virtual-machine command-line-interface virtualbox

我在Ubuntu 14.04上运行VirtualBox 5.0.16。我有32位版Windows7的虚拟机。我想要做的是在客人上运行程序。首先,我尝试使用Python脚本来实现此目的:

vbox = virtualbox.VirtualBox()
session = virtualbox.Session()
vm = vbox.find_machine('Windows7')
vm.launch_vm_process(session, 'gui', '').wait_for_completion()

session = vm.create_session()
time.sleep(35)
gs = session.console.guest.create_session('win7', '')
process, stdout, stderr = gs.execute('C:\\Windows\\System32\\cmd.exe', ['/C', 'tasklist'])
print stdout

机器启动良好,但我无法运行任何程序,因为出现以下错误:

  

追踪(最近一次调用最后一次):文件“runonguest.py”,第39行,中          gs = session.console.guest.create_session('win7','')File“/usr/local/lib/python2.7/dist-packages/virtualbox/library_ext/guest.py”,   第24行,在create_session中       引发SystemError(“GuestSession无法启动”)SystemError:GuestSession无法启动

我尝试使用命令行以便在guest虚拟机上运行程序。所以我运行虚拟机,并尝试执行以下命令:

VBoxManage guestcontrol "Windows7" --username win7 run --exe C:\Windows\System32\cmd.exe  --wait-stdout  -- "C:\Windows\System32\cmd.exe" "/C" "tasklist"

但它给我带来了下一个错误:

  

VBoxManage:错误:VERR_ACCOUNT_RESTRICTED VBoxManage:错误:详情:   代码VBOX_E_IPRT_ERROR(0x80bb0005),组件GuestSessionWrap,   接口IGuestSession,被调用者nsISupports VBoxManage:错误:   上下文:“WaitForArray(ComSafeArrayAsInParam(aSessionWaitFlags),30 *   1000,& enmWaitResult)“在文件VBoxManageGuestCtrl.cpp的第938行

我正在寻找可能的解决方案,但其中大多数都是针对VirtualBox的旧版本,其中命令运行根本不存在。 如果有人知道任何可能的解决方案,那将是很好的。 感谢。

2 个答案:

答案 0 :(得分:4)

访问[开始菜单]并在[搜索程序和文件]中输入运行。 在[运行线]内输入 gpedit.msc 。 在那里,转到Windows设置 - >安全设置 - >本地政策 - >安全选项 - > [帐户:限制本地帐户使用空白密码仅限控制台登录]并将其设置为已禁用。 VM重启后,应该解决。

答案 1 :(得分:0)

到目前为止,我设法在VirtualBox中的客户操作系统上启动程序。 该解决方案基于(我看到的未记录)事实,即如果用户帐户没有密码,VBox API就不会启动会话。因此,我在访客的Windows7上创建了带密码的新用户帐户。

对于Python,只需写:

    In [15]: gs = session.console.guest.create_session('user', 'user')

    In [16]: process, stdout, stderr = gs.execute('C:\\Windows\\System32\\cmd.exe', ['/C', 'tasklist'])

    In [17]: print stdout

    Image Name                     PID Session Name        Session#    Mem Usage
    ========================= ======== ================ =========== ============
    System Idle Process              0 Services                   0         12 K
    System                           4 Services                   0        528 K
    smss.exe                       264 Services                   0        688 K
    csrss.exe                      340 Services                   0      2,824 K
    wininit.exe                    388 Services                   0      3,128 K
    csrss.exe                      400                            1      3,572 K
    winlogon.exe                   440                            1      5,556 K 
.....

对于控制台使用,只需写:

VBoxManage guestcontrol "Windows7" --verbose  --username user --password user run --exe "C:\\
Windows\\System32\\cmd.exe" -- cmd.exe /c tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         12 K
System                           4 Services                   0        532 K
smss.exe                       264 Services                   0        688 K
csrss.exe                      340 Services                   0      2,848 K
wininit.exe                    388 Services                   0      3,128 K
csrss.exe                      400                            1      3,572 K
winlogon.exe                   440                            1      5,556 K
......

启动详情:

python 2.7.6
pyvbox 1.0.0
主机操作系统 - Ubuntu 14.04
访客操作系统 - Windows7 x32

VirtualBox 5.0.16

UPD:根据 iugene的回答,真正的解决方案是在Windows安全策略中。

  

访问[开始菜单]并在[搜索程序和文件]中输入运行。内   [运行行]输入gpedit.msc。在那里,转到Windows设置 - >安全   设置 - >本地政策 - >安全选项 - > [帐户:限制   本地帐户使用空白密码仅控制台登录]并进行设置   到残疾人士VM重启后,应该解决。