检查缺少的文件时出错: 该虚拟机不允许快照。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查缺少的文件时出错: 该虚拟机不允许快照。相关的知识,希望对你有一定的参考价值。

检查缺少的文件时出错: 该虚拟机不允许快照。这是安装时提出的,想问下虚拟机到底该怎么样装?需要光盘吗?但我操作系统已经下好了啊?谢谢。。。。

参考技术A 先装上系统,在装那个软件..系统不能是ghost 版的..

在Virtual Box中恢复虚拟机快照时出错

我为我的项目使用VirtualBox和Virtual Box API Microsoft Com C ++。它是VirtualBox 6.0.6软件开发工具包(SDK)和VirtualBox 6.0.6平台包。 我有个问题。我想恢复早期创建的快照系统,但程序显示错误。 我的代码有评论:

HRESULT rc; 

IVirtualBoxClient *virtualBoxClient = nullptr; 
IVirtualBox *virtualBox = nullptr; 
IMachine *machine = nullptr; 
ISession *session = nullptr; 
IProgress *progress = nullptr; 
ISnapshot* snapshot = nullptr; 

BSTR sessiontype = SysAllocString(L"gui"); 
BSTR machineName = SysAllocString(L"Win7x64"); 


HRESULT rc = CoCreateInstance(CLSID_VirtualBoxClient, NULL, CLSCTX_INPROC_SERVER, IID_IVirtualBoxClient, (void**)&virtualBoxClient); 

rc = virtualBoxClient->get_VirtualBox(&virtualBox); 

// looking for a machine with a name Win7x64 
rc = virtualBox->FindMachine(machineName, &machine); 

// create a session object 
rc = CoCreateInstance(CLSID_Session, NULL, CLSCTX_INPROC_SERVER, IID_ISession, (void**)&session); 
if (!SUCCEEDED(rc)) 
{ 
printf("Error creating Session instance! rc = 0x%x
", rc); 
break; 
} 

// block the machine 
machine->LockMachine(session, LockType::LockType_Shared); 

// the name of the snapshot system 
BSTR snapshotUUID = SysAllocString(L"Win7_test_snapshot"); 
// looking for a snapshot system 
rc = machine->FindSnapshot(snapshotUUID, &snapshot); 
// recover snapshot. ERROR: variable rc - E_NOTIMPL Not implemented. 
rc = machine->RestoreSnapshot(snapshot, &progress); 

printf("Starting VM, please wait ...
"); 
//waiting for the end of the operation. Abnormal termination- progress == nullptr ! 
rc = progress->WaitForCompletion(-1); 
// unlocking the machine 
rc = session->UnlockMachine(); 
if (!SUCCEEDED(rc)) 
{ 
printf("Error restore state machine!
"); 
break; 
}

另外,我创建了一个简单的C#应用​​程序,并在那里得到了完全相同的错误。怎么了?这是错误的API?我甚至多次更改操作系统(虚拟):

  static void Main(string[] args)
    {
        VirtualBox.VirtualBox virtualBox = new VirtualBox.VirtualBox();
        IMachine vmMachine = virtualBox.FindMachine("Win7x64VB");
        Session session = new Session();
        vmMachine.LockMachine(session, LockType.LockType_Shared);
        IConsole console = session.Console;

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

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

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

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

        launchVmProgess.WaitForCompletion(300000);
    }

enter image description here

你能帮帮我,如何修复呼叫方法错误“RestoreSnapshot - E_NOTIMPL Not implemented”或如何正确恢复系统快照?谢谢。

P.S。:我在官方论坛上问过这个问题,但没有人帮助我。

答案

我找到了问题的解决方案。应使用当前用于会话的系统恢复快照。所以代码如下:

HRESULT rc = machine->LockMachine(session, LockType::LockType_Shared);
rc = machine->FindSnapshot(snapshotUUID, &snapshot);
IMachine* currentMachine(nullptr);
rc = session->get_Machine(&currentMachine);
rc = currentMachine->RestoreSnapshot(snapshot, &progress);
rc = progress->WaitForCompletion(300000);
rc = session->UnlockMachine();

它适用于此代码。

以上是关于检查缺少的文件时出错: 该虚拟机不允许快照。的主要内容,如果未能解决你的问题,请参考以下文章

为啥虚拟机无法创建快照

VM虚拟机拍摄快照时出错或者克隆失败解决办法

ESXi内虚拟机带快照与不带快照的情况下简单性能对比.

在虚拟机中进行啥操作时,原则上不需要先对虚拟机做快照

在Virtual Box中恢复虚拟机快照时出错

ESXI5.5虚拟机还原快照数据恢复处理办法