1

У меня была идея использовать виртуальную машину 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 или даже в команде запуска. Я в тупике.

1 ответ1

0

Ну, я нашел обходной путь. Я думаю, что проблема была с 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, но серьезно, кто-нибудь еще использует его (по крайней мере, в виртуальной машине)?

Единственная проблема заключается в том, что окно PowerShell открывается на короткое время, но в этом нет ничего особенного.

Я установил скрипт в качестве обработчика по умолчанию для протоколов itms и itmss, и поэтому теперь, когда я нажимаю ссылку "Просмотреть в iTunes" на веб-сайте iTunes на моем хосте в Chrome, он запускает iTunes в моей гостевой системе Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .