
Ich muss ein Programm (virtuelle Maschine) im Hintergrund mit einem start
Befehl in der Windows 7-Befehlszeile starten. Normalerweise würde man das so machen:
start /b cmd yourprogram
Aber ich muss einige Argumente übergeben und zwar so (ohne /b
Flag zum Anzeigen der Debuginformationen):
start C:\Users\USER>start "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"
Ich erhalte diese Fehlermeldung:
Windows kann „-startvm“ nicht finden. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und versuchen Sie es dann erneut.
Wenn ich es hingegen im aktuellen Befehlszeilenfenster ohne das start
am Anfang mache, läuft die virtuelle Maschine normal – aber im Vordergrund.
Irgendwelche Lösungen?
Antwort1
start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"
Wenn Sie die Parameterliste lesen mit start /?
:
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[command/program] [parameters]
"title" Title to display in window title bar.
command/program
If it is an internal cmd command or a batch file then
the command processor is run with the /K switch to cmd.exe.
This means that the window will remain after the command
has been run.
If it is not an internal cmd command or batch file then
it is a program and will run as either a windowed application
or a console application.
parameters These are the parameters passed to the command/program.
Es wird ein title
in Anführungszeichen eingeschlossenes ( "
) erwartet. Da Ihr Programmpfad Anführungszeichen enthielt, wurde es als Titel interpretiert. Das Hinzufügen eines expliziten Titels (in diesem Fall leer, ""
) funktioniert.
Eine alternative Methode besteht darin, /d
den Pfad mit dem Schalter anzugeben. Genauer gesagt:
start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"
Es scheint, dass das erste Argument nach dem /d
Schalter als Pfad verwendet wird, auch wenn es in Anführungszeichen steht. Wenn das nächste Argument nicht in Anführungszeichen steht, funktioniert dies. Alles nach dem, was als Befehl/Programm erkannt wird, wird als Parameter an diesen Befehl/dieses Programm übergeben. Beachten Sie, dass dies nicht funktioniert, wenn der Befehl/das Programm Leerzeichen im Namen hat, z. B. VBox Headless.exe
, da dies Anführungszeichen erfordern und als Titel erkannt werden würde.
Insgesamt ist die erste Methode (expliziter Titel) wahrscheinlich besser. Es war eine schlechte Designentscheidung von Microsoft, sie hätten wirklich einen Schalter für den Titel hinzufügen sollen, anstatt „ist das erste Argument in Anführungszeichen eingeschlossen?“.
Antwort2
Tatsächlich ist die akzeptierte Antwort immer noch keine Lösung. Das Schließen des Cmd-Fensters, in dem der Befehl ausgeführt wurde, beendet den vboxheadless-Prozess mit der darin laufenden virtuellen Maschine.
Mit dem folgenden Ansatz können SiePower Shelleinen unabhängigen Prozess ausführen.
Führen Sie in cmd Folgendes aus:
cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms
Das Ergebnis ist etwa:
"Webserver LAP" {8748b594-7e2d-4d8d-8785-999940766754}
Nehmen Sie nun die UUID und führen Sie Folgendes aus (immer noch in cmd):
powershell start-process 'C:\program files\oracle\virtualbox\vboxheadless' '-s 8748b594-7e2d-4d8d-8785-999940766754' -WindowStyle Hidden
Dank an den Autor vonDieser Artikel.