Windows 7のコマンドラインでstart
コマンドを使用してバックグラウンドでプログラム(仮想マシン)を起動する必要があります。通常は次のようにします。
start /b cmd yourprogram
しかし、私はいくつかの引数を渡す必要があります、そして私がそうするときは(デバッグ情報を見るために/b
フラグなしで):
start C:\Users\USER>start "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"
私はこのエラーメッセージを得ます:
Windowsは '-startvm'を見つけることができません。名前を正しく入力したことを確認してから、やり直してください。
一方、最初のstart
を指定せずに現在のコマンドラインウィンドウで実行すると、仮想マシンは正常に動作しますが、フォアグラウンドで動作します。
解決策はありますか?
start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"
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.
引用符で囲まれたtitle
が必要です("
)。プログラムパスに引用符が含まれているので、それはタイトルとして解釈されました。明示的なタイトル(この場合は空、""
)を追加するとうまくいきます。
別の方法は/d
スイッチを使用してパスを指定することです。具体的には:
start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"
たとえ引用符で囲まれていても/d
スイッチの後の最初の引数をパスとして使用しているように見えます。次の引数が引用符で囲まれていない場合はこれでうまくいきます。コマンド/プログラムとして認識された後のすべてのものは、そのコマンド/プログラムへのパラメータとして渡されます。コマンド/プログラムの名前にスペースが含まれていると、これは機能しません。 VBox Headless.exe
は、引用符が必要でタイトルとして認識されるためです。
全体的に見て、最初の(明示的なタイトル)方法がおそらくより優れています。それはマイクロソフトの側では悪い設計上の選択でした、彼らは本当に「引用符で囲まれた最初の引数ですか?」よりむしろタイトルのためのスイッチを追加するべきでした。
実際に受け入れられた答えはまだ解決策ではありません。コマンドが実行されたcmdウィンドウを閉じると、実行中の仮想マシンを含むvboxheadlessプロセスが強制終了されます。
以下の方法を使用すると、 PowerShell が独立したプロセスを実行します。
Cmdで、次のコマンドを実行します。
cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms
これは次のようになります。
"Webserver LAP" {8748b594-7e2d-4d8d-8785-999940766754}
それではUUIDを取得して次のコマンドを実行してください(まだcmdにあります):
powershell start-process 'C:\program files\Oracle\virtualbox\vboxheadless' '-s 8748b594-7e2d-4d8d-8785-999940766754' -WindowStyle Hidden
この記事の著者に感謝します。