web-dev-qa-db-fra.com

Pourquoi ma ligne de commande Windows 8 ne met-elle pas à jour son chemin

Je devais ajouter une nouvelle entrée à ma variable PATH. C'est une activité courante pour moi dans mon travail, mais j'ai récemment commencé à utiliser Windows 8. J'ai supposé que le processus serait similaire à Windows 7, Vista, XP ...

Voici ma séquence d'événements:

  1. Ouvrez les propriétés du système (Démarrer-> [type "Panneau de configuration"] -> Panneau de configuration\Système et sécurité\Système -> Paramètres système avancés -> Variables d'environnement).
  2. Ajoutez le nouveau chemin au début de ma variable USER PATH (C:\dev\Java\Apache-ant-1.8.4\bin;)
  3. Ouverture d'une invite de commande (Démarrer -> [type "invite de commande" entrer] -> [type "chemin" entrée]

Ma nouvelle entrée de chemin n'est pas disponible (voir l'image et la vidéo ci-jointes). J'ai dupliqué exactement le même processus sur une machine Windows 7 et cela a fonctionné.

Screen grab of environment variables

EDIT

Variables d'environnement Windows 8 et vidéo d'invite de commande

EDIT

Ce n'est certainement pas le comportement de Windows 7. Regardez cette vidéo pour voir le comportement Je m'attends à fonctionner sous Windows 7. http://youtu.be/95JXY5X0fII

EDIT 5/31/2013

Donc, après beaucoup de frustration, j'ai écrit une petite application C # pour tester l'événement WM_SETTINGCHANGE. Ce code reçoit l'événement sous Windows 7 et Windows 8. Toutefois, sous Windows 8 sur mon système, le chemin d'accès n'est pas correct. mais, je le fais dans Windows 7. Cela ne pouvait pas être reproduit dans d'autres systèmes Windows 8.

Voici le code C #.

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        SystemEvents.UserPreferenceChanging += new UserPreferenceChangingEventHandler(OnUserPreferenceChanging);

        Console.WriteLine("Waiting for system events.");
        Console.WriteLine("Press <Enter> to exit.");
        Console.ReadLine();
    }

    static void OnUserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
        Console.WriteLine("path={0}", System.Environment.GetEnvironmentVariable("PATH"));
    }
}

OnUserPreferenceChangingéquivaut àWM_SETTINGCHANGE

programme C # sous Windows 7 (vous pouvez voir l’événement arriver et il prend le bon chemin).

programme C # sous Windows 8 (vous pouvez voir l’événement arriver, mais le mauvais chemin).

Il y a quelque chose dans mon environnement qui précipite ce problème. Cependant, s'agit-il d'un bogue de Windows 8?

EDIT 2014-04-28

En raison de cela et de plusieurs autres problèmes, nous n’utilisons plus Windows 8 sur le bureau. Nous n'avons pas d'environnement pour continuer à tester et à expérimenter ce problème. Il n'y a toujours pas de réponse ou de solution à ce problème pour nous. Les réponses ci-dessous n'ont pas résolu notre problème.

21
mawcsco

Si vous lancez l'invite de commande à partir du menu Démarrer ou d'un raccourci dans votre barre des tâches, vous devez soit:

  • Redémarrez Explorername__. Tuez-le et relancez-le.
  • Déconnectez-vous et reconnectez-vous (ce qui relance effectivement Explorername__).
  • Redémarrez le système (qui relance également Explorername__).

L'environnement ne se met pas à jour immédiatement, car les environnements sont hérités de leur processus parent, à l'exception de Explorername__, qui est démarré par le système lors de la connexion. Voici comment cela se comporte sur mon système Windows 7.

Ainsi, la modification des variables d'environnement met à jour les clés de registre, mais ces clés ne sont pas relues tant que le système n'a pas besoin de créer un nouvel environnement de connexion pour le lancement d'un processus. La plupart du temps, cela ne se produit pas car les processus sont les enfants d'un processus qui a déjà un environnement, donc l'environnement est hérité.

7
Darth Android

De: http://support.Microsoft.com/kb/104011 via https://serverfault.com/q/8855/158027

...

Toutefois, notez que les modifications des variables d'environnement n'entraînent pas de changement immédiat. Par exemple, si vous démarrez une autre invite après avoir apporté les modifications, les variables d'environnement refléteront les valeurs précédentes (et non les valeurs actuelles). Les modifications ne prennent effet que lorsque vous vous déconnectez, puis vous reconnectez.

Pour effectuer ces modifications sans avoir à vous déconnecter, diffusez un message WM_SETTINGCHANGE sur toutes les fenêtres du système afin que toutes les applications intéressées (telles que l'Explorateur Windows, le Gestionnaire de programmes, le Gestionnaire de tâches, le Panneau de configuration, etc.) puissent effectuer une mise à jour. PLUS D'INFORMATION


Par exemple, sur les systèmes Windows NT, le fragment de code suivant doit propager les modifications apportées aux variables d'environnement utilisées dans l'invite de commandes:

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM) "Environment", SMTO_ABORTIFHUNG,
    5000, &dwReturnValue);

Aucune des applications fournies avec Windows 95 et Windows 98, y compris l'Explorateur Windows et le Gestionnaire de programmes, ne répond à ce message. Ainsi, bien que cet article puisse techniquement être implémenté sous Windows 95 et Windows 98, il n’existe aucun effet, sauf celui de notifier les applications tierces. La seule méthode permettant de modifier les variables d'environnement globales sous Windows 95 consiste à modifier le fichier autoexec.bat et à redémarrer.

3
Enigma

Le problème vient de vos paramètres utilisateur. Dans la fenêtre 8, chaque utilisateur a ses propres variables d’environnement.

Ouvrez les propriétés du système (Démarrer-> [type "Panneau de configuration"] -> Panneau de configuration\Système et sécurité\Système -> Paramètres système avancés -> Variables d'environnement).

L'approche ci-dessus modifiera les variables d'environnement pour l'utilisateur root, peut-être pas pour l'utilisateur actuel.

Vous devriez aller sur user-account -> sélectionnez votre compte actuel -> changez les variables d'environnement

Après avoir changé, redémarrez Power Shell. ensuite

echo $env:Java_HOME

ou

Get-ChildItem env

J'espère que ceci vous aidera.

1
Vu Gia Truong

En retard au sien. Toutefois. Vous pouvez être victime de ce problème: Les variables utilisateur ne sont pas résolues correctement sous Windows .

0
elder elder

Essayez SETX à la place de SET. E.g SETX PATH "%PATH%;MyPath"

0
kct

Si vous utilisez Windows 8.1, ouvrez la commande Invite en tant qu'administrateur, puis appelez la commande PATH et vous devriez la voir apparaître ici. Lorsque vous revenez à cmd normal, il apparaîtra également Et en fait, vous devriez pouvoir démarrer l’application ajoutée à partir de la commande Invite.

0
viktorkh