我有一个想法,使用我的 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。