VBoxManage guestcontrol 传递参数是否错误?

VBoxManage guestcontrol 传递参数是否错误?

我有一个想法,使用我的 Windows VM(在 Ubuntu 主机上)从主机打开 itms:// 链接(用于 iTunes)。因此,我使用 vboxmanage guestcontrol 来实现这一点。

我有一个脚本(win_vm_launcher.sh),它以链接作为参数,并将其传递给主机,如下所示:

vboxmanage guestcontrol "$VM" exec --image 'C:\Windows\System32\cmd.exe' --username "$USER" --password "$PASSWORD" -- /c start "$@"

如果我从浏览器复制链接并将 http 更改为 itms,则此方法有效。例如,对于https://itunes.apple.com/us/album/new-york-city/id3202598,我可以这样做,win_vm_launcher.sh itmss://itunes.apple.com/us/album/new-york-city/id3202598而且效果很好。专辑在我的虚拟机上的 iTunes 中打开。

但是,当我单击 iTunes 网站上的“在 iTunes 中查看”链接时,它会向 URI(具体来说,是引荐来源)添加一个额外的参数,因此它看起来像 itmss://itunes.apple.com/us/album/new-york-city/id3202598?ign-msr=https%3A%2F%2Fitunes.apple.com%2Fus%2Falbum%2Fit-came-upon-midnight-clear%2Fid578946739

不幸的是,如果我尝试运行win_vm_launcher.sh itmss://itunes.apple.com/us/album/new-york-city/id3202598?ign-msr=https%3A%2F%2Fitunes.apple.com%2Fus%2Falbum%2Fit-came-upon-midnight-clear%2Fid578946739它,则会打开一个常规的命令提示符窗口,标题为“itmss://itunes.apple.com/us/album/new-york-city/id3202598?ign-msr=https%3A%2F%2Fitunes.apple.com%2Fus%2Falbum%2Fit-came-upon-midnight-clear%2Fid578946739”。我甚至不知道如何设置命令提示符窗口标题,所以我不确定这是怎么发生的。

如果我在客户机中运行该命令,它可以正常工作,并在 iTunes 中打开专辑:

cmd /c start itmss://itunes.apple.com/us/album/new-york-city/id3202598?ign-msr=https%3A%2F%2Fitunes.apple.com%2Fus%2Falbum%2Fit-came-upon-midnight-clear%2Fid578946739

我发现了一个VirtualBox 错误这似乎有点相关,但并不完全相关。

这可能没关系,但我的主机是 Ubuntu 12.04,而我的客户机是 Windows 7。

那么,您知道 vboxmanage 是否错误地传递了参数吗?如果是,有没有办法解决这个问题?

如果我无法找到正确的方法,我最终将不得不处理每个参数,并删除任何 URI 上的任何参数。

附言

我尝试创建一个批处理脚本(out.bat),如下所示:

echo %1 > %TEMP%/testing.txt

然后像这样从主机运行它:vboxmanage guestcontrol "$VM" exec --image 'C:\Windows\System32\cmd.exe' --username "$USER" --password "$PASSWORD" -- /c "C:\path\to\out.bat" "itmss://itunes.apple.com/us/album/new-york-city/id3202598?ign-msr=https%3A%2F%2Fitunes.apple.com%2Fus%2Falbum%2Fit-came-upon-midnight-clear%2Fid578946739"

它按预期运行,当我打开 %TEMP%/testing.txt 时,它包含:

“itmss://itunes.apple.com/us/album/new-york-city/id3202598?ign-msr=https%3A%2F%2Fitunes.apple.com%2Fus%2Falbum%2Fit-came-upon-midnight-clear%2Fid578946739”

包括引号。所以,它正确地传递了参数(不确定为什么它仍然有引号),所以问题可能出在 cmd.exe 上,甚至是启动命令上。我被难住了。

答案1

好吧,我找到了一个解决方法。我认为问题出在 cmd.exe 上,但我不确定是什么,因为我找到了一种使用 PowerShell 使其正常工作的方法。

脚本现在内容如下:

vboxmanage guestcontrol "$VM" exec --image 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' --username "$USER" --password "$PASSWORD" -- "% {Start-Process $1}"

当然,对于使用 Windows XP 的任何人来说,这个解决方案都不起作用,但说真的,还有人在使用它吗(至少在 VM 中)?

唯一的问题是 PowerShell 窗口会短暂打开,但这没什么大不了的。

我将脚本设置为 itms 和 itmss 协议的默认处理程序,因此现在当我在 Chrome 中的主机上单击 iTunes 网站上的“在 iTunes 中查看”链接时,它会在我的 Windows 客户机中启动 iTunes。

相关内容