1 votes

Est-ce que VBoxManage guestcontrol passe des paramètres incorrectement ?

J'ai eu l'idée d'utiliser ma VM Windows (sur un hôte Ubuntu) pour ouvrir des liens itms:// (pour iTunes) depuis l'hôte. J'utilise donc vboxmanage guestcontrol pour y parvenir.

J'ai un script (win_vm_launcher.sh) qui prend un lien comme argument, et le passe à l'hôte comme ceci :

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

Cela fonctionne si je copie un lien depuis mon navigateur, et que je change http en itms. Par exemple, pour https://itunes.apple.com/us/album/new-york-city/id3202598 Je peux le faire. win_vm_launcher.sh itmss://itunes.apple.com/us/album/new-york-city/id3202598 et cela fonctionne bien. L'album s'ouvre dans iTunes sur ma machine virtuelle.

Cependant, lorsque je clique sur un lien "Afficher dans iTunes" à partir du site iTunes, un paramètre supplémentaire est ajouté à l'URI (en particulier, le référent), de sorte que cela ressemble à 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

Malheureusement, si j'essaie d'exécuter 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 il ouvre à la place une fenêtre d'invite de commande normale avec le titre "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". Je ne sais même pas comment définir le titre de la fenêtre de l'invite de commande, donc je ne sais pas comment cela se produit.

Si j'exécute la commande dans l'invité, cela fonctionne bien, ouvrant l'album dans 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

J'ai trouvé un Bug de VirtualBox qui semble quelque peu lié, mais pas exactement.

Cela n'a probablement aucune importance, mais mon hôte est Ubuntu 12.04, et mon invité est Windows 7.

Savez-vous si vboxmanage ne transmet pas correctement les arguments et, si c'est le cas, existe-t-il un moyen de le contourner ?

Si je ne parviens pas à trouver le bon moyen de le faire, je vais devoir traiter chaque argument et supprimer tous les paramètres des URI.

P.S.

J'ai essayé de créer un lot script (out.bat) comme ceci :

echo %1 > %TEMP%/testing.txt

et ensuite l'exécuter depuis l'hôte comme ceci : 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"

Il s'est exécuté comme prévu, et lorsque j'ouvre %TEMP%/testing.txt, il contient :

"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"

y compris les citations. Ainsi, le paramètre est passé correctement (je ne sais pas pourquoi il y avait encore des guillemets), alors peut-être que le problème vient de cmd.exe, ou même de la commande de démarrage. Je suis perplexe.

0voto

DarthMaul Points 57

J'ai trouvé un moyen de contourner le problème. Je pense que le problème venait de cmd.exe, mais je ne suis pas sûr de quoi, car j'ai trouvé un moyen de le faire fonctionner en utilisant PowerShell à la place.

Le script se lit maintenant :

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

Bien sûr, cette solution ne fonctionnera pas pour ceux qui utilisent Windows XP, mais sérieusement, est-ce que quelqu'un l'utilise encore (au moins dans une VM) ?

Le seul problème est que la fenêtre PowerShell s'ouvre brièvement, mais ce n'est vraiment pas grave.

J'ai défini le script comme gestionnaire par défaut pour les protocoles itms et itmss, et donc maintenant, lorsque je clique sur un lien "Afficher dans iTunes" sur le site web iTunes de mon hôte dans Chrome, cela lance iTunes dans mon invité Windows.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X