在 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\n", 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 ...\n"); 

//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!\n"); 

break; 

}

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

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


PS:我在官方论坛上问过这个问题,没人帮我。


慕田峪7331174
浏览 121回答 1
1回答

蝴蝶不菲

我找到了问题的解决方案。应使用会话的当前系统恢复快照。所以代码将如下所示: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();它适用于此代码。
打开App,查看更多内容
随时随地看视频慕课网APP