2012-12-12 95 views
8

我想编写一个Java程序,在VirtualBox客机中启动一个程序(例如:Firefox)。主机是Windows,客户是Ubuntu。根据SDK文档,应该可以做到这一点。这是我在Java中尝试基于我所见过的文档中(假设虚拟机运行起来):VirtualBox:使用SDK API在guest虚拟机中启动程序?

String machineName = "MyMachine"; 
String url = "http://localhost:18083"; 
String user = ""; 
String passwd = ""; 

VirtualBoxManager mgr = VirtualBoxManager.createInstance(null); 
mgr.connect(url, user, passwd); 
IVirtualBox vbox = mgr.getVBox(); 
System.out.println("Running VirtualBox version " + vbox.getVersion()); 

IMachine machine = vbox.findMachine(machineName); 
ISession session = mgr.getSessionObject(); 
machine.lockMachine(session, LockType.Shared); 
IConsole console = session.getConsole(); 
IGuest guest = console.getGuest(); 

IGuestSession guestSession = guest.createSession("bob","password", "", ""); 
guestSession.processCreate("/usr/bin/firefox", null, null, null, 0L); 

session.unlockMachine(); 

当我跑,我得到:

Exception in thread "main" org.virtualbox_4_2.VBoxException: VirtualBox error: The session is not locked (session state: Unlocked) (0x8000FFFF) 
at org.virtualbox_4_2.ISession.getConsole(ISession.java:145) 
at Test1.main(Test1.java:27) 

我对锁和会话尝试了不同的选项,但总是遇到某种类型的错误。如果我将LockType设置为Write,则会出现“将计算机分配给会话失败”错误。

有没有人这样做?有没有可靠的Java VirtualBox教程在线?我找不到Google。

任何意见赞赏。

+0

你找到一个解决@TrentCoder? – aandis

回答

0

我也不知道如何用SDK做到这一点。但是你有没有试过通过SSH向虚拟机发送推荐?因此,您需要设置网络以及所有这些,但这将是一个很好的选择,因为缺少VirtualBox SDK文档会导致存档变得复杂。

0

您是否尝试等待客人会话开始。你的情况这应该是这样的

guestSession = guest.CreateSession(....

guestSession.waitFor(1L,0L)

+0

你的意思是'GuestSessionWaitForFlag_Start'而不是'1L'吗? –

+0

是的,当我的应用程序等待客户端会话处于启动状态时,我有相同的工作和进程启动。当我评论waitFor(或waitForArray)来宾会话状态时in Error。可能的话,你必须尝试不同的标志,例如,标志GuestSessionWaitForFlag_Status (或4L),以便等待会话状态改变 – Sergey

相关问题