Daniel Dreibrodt
2014-07-02 13:52:05 UTC
Hello,
I?m developing a C# application that controls VMs, starts them, stops them and runs programs in them. It should also reset the VM to a previously saved snapshot.
But I get a NullReferenceException because the Console object of my session is null, although I call LockMachine.
Here is the code with which I try to reset the machine after it has been powered down.
public void Reset(string snapshotName = "BeforeTest")
{
Logger.WriteLine("Resetting the VM");
var writeSession = new SessionClass();
m_Machine.LockMachine(writeSession, LockType.LockType_Write);
int waitCycles = 0;
while (writeSession.State != SessionState.SessionState_Locked & waitCycles < 100)
{
Thread.Sleep(10);
waitCycles++;
}
if (writeSession.State != SessionState.SessionState_Locked)
throw new VirtualMachineException("The VM could not be locked!");
var console = writeSession.Console;
if(console == null)
throw new VirtualMachineException("The Console is null!"); //This is where the problem is found
var snapshot = m_Machine.FindSnapshot(snapshotName);
if (snapshot == null)
throw new VirtualMachineException("Could not find Snapshot \"" + snapshotName + "\"");
var progress = console.RestoreSnapshot(snapshot);
progress.WaitForCompletion(30000);
writeSession.UnlockMachine();
waitCycles = 0;
while (writeSession.State != SessionState.SessionState_Unlocked & waitCycles < 100)
{
Thread.Sleep(10);
waitCycles++;
}
Logger.WriteLine(" The VM has been reset to the snapshot \"" + snapshotName + "\"");
}
I?m using VirtualBox 4.3.12 and the COM API. How can I properly restore a snapshot? Why Is the Console null?
Best Regards,
Daniel
[cid:image772942.PNG at 45783a2b.4a82e822]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.virtualbox.org/pipermail/vbox-dev/attachments/20140702/2b6adc55/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image772942.PNG
Type: image/png
Size: 22112 bytes
Desc: image772942.PNG
Url : Loading Image...
I?m developing a C# application that controls VMs, starts them, stops them and runs programs in them. It should also reset the VM to a previously saved snapshot.
But I get a NullReferenceException because the Console object of my session is null, although I call LockMachine.
Here is the code with which I try to reset the machine after it has been powered down.
public void Reset(string snapshotName = "BeforeTest")
{
Logger.WriteLine("Resetting the VM");
var writeSession = new SessionClass();
m_Machine.LockMachine(writeSession, LockType.LockType_Write);
int waitCycles = 0;
while (writeSession.State != SessionState.SessionState_Locked & waitCycles < 100)
{
Thread.Sleep(10);
waitCycles++;
}
if (writeSession.State != SessionState.SessionState_Locked)
throw new VirtualMachineException("The VM could not be locked!");
var console = writeSession.Console;
if(console == null)
throw new VirtualMachineException("The Console is null!"); //This is where the problem is found
var snapshot = m_Machine.FindSnapshot(snapshotName);
if (snapshot == null)
throw new VirtualMachineException("Could not find Snapshot \"" + snapshotName + "\"");
var progress = console.RestoreSnapshot(snapshot);
progress.WaitForCompletion(30000);
writeSession.UnlockMachine();
waitCycles = 0;
while (writeSession.State != SessionState.SessionState_Unlocked & waitCycles < 100)
{
Thread.Sleep(10);
waitCycles++;
}
Logger.WriteLine(" The VM has been reset to the snapshot \"" + snapshotName + "\"");
}
I?m using VirtualBox 4.3.12 and the COM API. How can I properly restore a snapshot? Why Is the Console null?
Best Regards,
Daniel
[cid:image772942.PNG at 45783a2b.4a82e822]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.virtualbox.org/pipermail/vbox-dev/attachments/20140702/2b6adc55/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image772942.PNG
Type: image/png
Size: 22112 bytes
Desc: image772942.PNG
Url : Loading Image...