Virtual machine 如何使用virtualbox api恢复快照

Virtual machine 如何使用virtualbox api恢复快照,virtual-machine,virtualbox,Virtual Machine,Virtualbox,我正试图通过SDK提供的vboxapi管理一些虚拟机。到目前为止,我成功地启动了虚拟机,恢复了一个快照,但我无法恢复快照并看到结果 def launch_vm(target): manager = VirtualBoxManager(None, None) vbox = manager.vbox session = manager.mgr.getSessionObject(vbox) pinfo("Reverting to snapshot '%s'" % ta

我正试图通过SDK提供的vboxapi管理一些虚拟机。到目前为止,我成功地启动了虚拟机,恢复了一个快照,但我无法恢复快照并看到结果

def launch_vm(target):
    manager = VirtualBoxManager(None, None)
    vbox = manager.vbox
    session = manager.mgr.getSessionObject(vbox)

    pinfo("Reverting to snapshot '%s'" % target['vm_snapshot_name'])
    try:
        vm = vbox.findMachine(target['vm_name'])
        snap = vm.findSnapshot(target['vm_snapshot_name']);

        progStart = vm.launchVMProcess(session, "gui", "");
        progStart.waitForCompletion(5000);

        vm.lockMachine(session,1)
        progress = session.console.restoreSnapshot(snap)
        progress.waitForCompletion(5000);
        session.unlockMachine()

    except Exception, e:
        perror(e)
我收到以下错误消息:

[错误]0x80bb0007(给定会话正忙)


我可能不把好的函数称为。。。谢谢

我已使用c#中的virtualbox api还原了一个快照

查看您的代码,您正在尝试在启动VMProcess后恢复快照。文件上说“机器不得运行,否则操作将失败”

此外,launchVMProcess将自动锁定您传入的会话,因此这可能是会话繁忙的原因。下面的代码是我如何运行我的部分的,我希望它能有所帮助

VirtualBox.VirtualBox virtualBox = new VirtualBox.VirtualBox();
IMachine vmMachine = virtualBox.FindMachine("Windows 8");
Session session = new Session();
vmMachine.LockMachine(session, LockType.LockType_Shared);
IConsole console = session.Console;

// Restore snapshot
ISnapshot snapShot = vmMachine.FindSnapshot("Snapshot 1");

IProgress snapShotProgress = console.RestoreSnapshot(snapShot);
snapShotProgress.WaitForCompletion(300000);

// unlock before launch VMProcess
session.UnlockMachine();

IProgress launchVmProgess = vmMachine.LaunchVMProcess(session, "gui", "None");

launchVmProgess.WaitForCompletion(300000);

首先,launchVMProcess将锁定机器,因此无需再次锁定

第二,你的在线快照是实时的还是离线的

您必须注意的另一件事是waitForCompletion()函数不会等待操作系统启动,它只是启动操作系统,这被认为是完成的,因此您可能需要自己进行一个繁忙的循环来等待操作系统加载