So speichern Sie den Status einer VirtualBox-Gastbetriebssystem-VM auf einem Windows-Host-Logout

866
Pak

Ich verwende ein Ubuntu VM-Gastbetriebssystem im Headless-Modus auf einem Windows 7-Host. Ich habe ein Batch-Skript geschrieben, das VBoxManage verwendet, um den Status der VM basierend auf dem übergebenen Argument zu starten oder zu speichern. Ich kann die VM einfach starten, indem Sie eine Verknüpfung zum Skript in meinem Startordner ablegen, aber ich habe Probleme, die VM beim Abmelden vorübergehend anzuhalten.

Ich habe verschiedene Methoden ausprobiert:

  1. Beim Erstellen eines Eintrags für Benutzerabmeldescripts im Editor für lokale Gruppenrichtlinien (gpedit.msc) wird mein Skript ausgeführt, der VBoxManage-Prozess meldet jedoch, dass die VM nicht ausgeführt wird. Ich gehe davon aus, dass der Logout-Prozess die VM abtötet, bevor mein Skript darauf zugreifen kann.
  2. Beim Erstellen einer Aufgabe über den Taskplaner, die beim Ereignis 7002 ausgelöst wird (was als Abmeldeereignis bezeichnet wird), wird das Skript ausgeführt. VBoxManage meldet jedoch Folgendes:

VBoxManage.exe: Fehler: Fehler beim Erstellen des VirtualBox-Objekts!

VBoxManage.exe: Fehler: Code E_ACCESSDENIED (0x80070005) - Fehler allgemeiner Zugriff verweigert (erweiterte Informationen nicht verfügbar)

VBoxManage.exe: Fehler: Der VirtualBox COM-Server wird wahrscheinlich nicht ausgeführt oder konnte nicht gestartet werden.

Gibt es eine bessere Möglichkeit, den Status einer VM beim Abmelden von Windows automatisch auszusetzen?


Der Inhalt des Batch-Skripts:

@echo off  setlocal  rem list of VMs to start/stop set vm_list=Ubuntu  set action=%1 if not "%action%" == "start" if not "%action%" == "stop" exit /B  set command="C:\Program Files\Oracle\VirtualBox\VboxManage.exe" set logfile="C:\bin\vm_log.txt"  if exist %logfile% echo.>> %logfile%  echo %date% %time%>> %logfile%  for %%A in (%vm_list%) do ( if "%action%" == "start" ( echo Starting %%A>> %logfile% 2>&1 %command% startvm %%A --type headless >> %logfile% 2>&1 ) else if "%action%" == "stop" ( echo Suspending %%A>> %logfile% 2>&1 %command% controlvm %%A savestate >> %logfile% 2>&1 )  )  endlocal 

Ich habe die Ausgabe der Befehle umgeleitet, unter vm_log.txtdenen ich die Meldungen sehen kann, die gemeldet wurden.

0
Könnten Sie Ihr Batch-Skript veröffentlichen? Es scheint, als ob VirtualBox selbst heruntergefahren ist, bevor das Skript den Befehl zum Speichern der Momentaufnahme / Zustandsspeicherung ausführen kann. JakeGould vor 8 Jahren 0
Ich habe den Inhalt des Skripts auf Ihre Anfrage eingestellt. Ich vermute, dass bei beiden Methoden, die ich ausprobiert habe, VirtualBox heruntergefahren wird, bevor mein Skript ausgeführt wird. Pak vor 8 Jahren 1

0 Antworten auf die Frage