Exécuter un fichier batch sur Windows 7 d'arrêt avant la fermeture des programmes (de préférence sur le bouton d'alimentation de la presse)
J'ai un Windows 7 boîte avec plusieurs VMWare Player machines qui sont lancés au démarrage. J'utilise WMWare VIX et un fichier de commandes pour arrêter les machines virtuelles comme suit:
"C:\path\to\VMWare VIX\vmrun.exe" -T player stop "C:\path\to\machine.vmx" soft
Ce que je veux accomplir est d'exécuter ces commandes lorsque l'hôte de la machine est à l'arrêt, de sorte que je n'ai pas besoin de fermer chaque VM séparément. Lorsqu'il est déployé, les arrêts de production sera probablement commencé par une courte pression de l'ACPI bouton d'alimentation, non pas à partir du menu Démarrer. Des égards, j'ai essayé ça ne fonctionne pas (du moins pas assez bien):
- Les Stratégies de groupe - le moyen Le plus évident à faire, mais dans Windows 7, la possibilité d'exécuter des scripts d'arrêt 'de manière asynchrone' a disparu.
Le résultat est que Windows première raconte toutes les fenêtres ouvertes pour fermer, les machines virtuelles répondent qu'ils sont en cours d'utilisation et vous obtenez le " Forcer la fermeture de la boîte de dialogue. Seulement après VMWare Player et tout le reste est fermé sont les scripts d'exécution, à la non-utilisation.
Vous pensez que cela pourrait être changé, mais je pense que je me souviens avoir vu quelques officiels MS remarque le long des lignes de "non, désolé". Ne pouvez pas trouver le lien. - Utiliser un fichier de commandes qui ferme toutes les machines virtuelles et puis les arrêts de l'hôte en tant que raccourci sur le bureau au lieu de l'habituel bouton d'arrêt. - Œuvres, et c'est ce que je suis en ce moment en développement.
Mais à l'aide de l'alimentation ACPI bouton déclenche un arrêt normal avec le même résultat que précédemment, et il serait mieux si l'utilisateur final qui met la machine en marche et l'arrêt sur une base quotidienne ne devrait pas avoir besoin d'utiliser un moniteur et une souris.
Donc ce que je vais googler pour l'instant est un moyen de modifier l'action appelée en appuyant sur le bouton d'alimentation physique. Windows vous permet de choisir entre différentes actions, comme dans le Sommeil, Hibernate, Redémarrer, etc, mais pourriez-vous changer cela en " Exécuter ce .chauve-souris"? Ou peut-être modifier le comportement de la commande d'arrêt en tout? - Par programme intercepter le message d'arrêt, d'annuler l'arrêt, exécutez le fichier de commandes, ré-initier l'arrêt. Il y a eu quelques débats sur l'interception d'arrêt par exemple ici, ici et ici, mais je suis encore trop de un n00b dans toutes les langues, sauf peut-être que Ruby ou Java pour vraiment comprendre si et comment il pourrait être fait dans ce cas. Si quelqu'un peut expliquer comment faire ce travail (sans rester bloqué sur " Forcer la fermeture de l'écran), alors je suis impatient d'essayer n'importe quelle langue que vous proposez.
OriginalL'auteur lime | 2011-01-24
Vous devez vous connecter pour publier un commentaire.
Ok, donc j'ai trouvé une solution qui a fonctionné pour moi; un outil appelé AutoHotkey_L et un script fait selon ces fils sur le AutoHotkey forums.
C'est le code que j'utilise, et je suggère la lecture sur AutoHotkey commandes dans le la documentation. Je suis en optimisant le code que j'ai appris ce qu'est réellement le faire, mais pour l'instant cela fonctionne. 🙂
Donc, pour l'instant il distingue seulement de fermeture de session et à l'arrêt, mais ce post a une interface simple en HTML qui permet à l'utilisateur de choisir s'ils veulent redémarrer, mettre en veille prolongée etc.
Dans mon cas c'est ok pour interrompre l'arrêt et exécutez le fichier de commandes, indépendamment de savoir si VMware est en cours d'exécution ou non, mais vous pouvez définir une condition pour l'exemple comme suit:
J'ai déjà couru dans des problèmes avec ce script, comme lorsque l'hôte est tellement ralenti (fuite de mémoire) que la "Force shudown" écran n'apparaît pas dans les temps pour le script pour le fermer. Et il serait peut-être avantageux de conserver une trace du nombre de tentatives, de sorte qu'il pourrait l'arrêt de la force si la première tentative échoue.
Assez bon pour le moment tout au moins. Et je peut même pas besoin de virtualisation pour mon projet, mais j'espère que ça peut aider quelqu'un d'autre. Des solutions alternatives sont toujours les bienvenus.
OriginalL'auteur lime
Je suis venu avec cette solution au même problème:
http://communities.vmware.com/thread/334740
L'astuce pour obtenir le passé de la "force close" est d'abord de suspendre ou d'arrêter toutes les machines virtuelles, puis re-problème de l'arrêt dans le même script. Il semble fonctionner pour moi.
OriginalL'auteur Wayne H
Poste de travail a une préférence pour " Maintenir les machines virtuelles s'exécutant après le poste de travail se ferme. N'VMware player ont la même option?
La façon dont je vois ce travail: Activer la préférence ci-dessus. La fenêtre se ferme, laissant les machines virtuelles en cours d'exécution. Le processus d'arrêt peut alors continuer à votre script de #1, qui devrait arrêt/suspendre la Vm avant de s'arrêter.
Je n'ai pas de Lecteur de VMs moi-même, donc je ne peux pas la tester, mais j'espère que cela aide.
pref.backgroundOnClose = "true"
dans les préférences.ini, mais encore, elle s'arrête à la fermeture de la fenêtre. Aussi, lors de l'arrêt, je reçois toujours coincé sur le " Forcer la fermeture de l'écran. Mais bonne idée, je vais jouer avec les paramètres et d'en faire rapport.Ok, donc le paramètre est
pref.vmplayer.exit.vmAction = "disconnect"
et il fait ce qu'il dit quand manuellement la fermeture (avec un bonus de message d'erreur sur Win7, pas si sur XP). Mais lors de l'arrêt de l'hôte les rapports des joueurs comme toujours que la machine est en cours d'utilisation et ne va pas fermer, même dans cet état déconnecté. Pouvez essayer avec de la station de travail, mais je suis dubitatif.OriginalL'auteur Evan Powell