У меня была идея использовать виртуальную машину Windows (на хосте 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-город / id3202598?IGN-MSR = HTTPS% 3A% 2F% 2Fitunes.apple.com% 2Fus% 2Falbum% 2Fit-пришел-на-полночь-ясный% 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-пришел-на-полночь, чистый% 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.
PS
Я попытался создать пакетный скрипт (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-пришел-на-полночь, чистый% 2Fid578946739"
в том числе цитаты. Таким образом, он вроде правильно передал параметр (не уверен, почему в нем все еще были кавычки), поэтому, возможно, проблема в cmd.exe или даже в команде запуска. Я в тупике.