Por que minha linha de Comando do Windows 8 não atualiza seu caminho?

21

Eu precisava adicionar uma nova entrada à minha variável PATH. Esta é uma atividade comum para mim no meu trabalho, mas recentemente comecei a usar o Windows 8. Assumi que o processo seria semelhante ao Windows 7, Vista, XP ...

Aqui está minha sequência de eventos:

  1. Abra as propriedades do sistema (Iniciar- > [digite "Painel de controle"] - > Painel de controle \ Sistema e Segurança \ Sistema - > Configurações avançadas do sistema - > Meio Ambiente Variáveis)
  2. Adicione o novo caminho ao início da minha variável USER PATH (C: \ dev \ Java \ apache-ant-1.8.4 \ bin;)
  3. Foi aberto um prompt de comando (Iniciar - > [digitar "prompt de comando" entrar] - > [digite "caminho" digite]

Minha nova entrada de caminho não está disponível (consulte a imagem anexada e vide). Eu copiei exatamente o mesmo processo em uma máquina com Windows 7 e funcionou.

EDITAR

Variáveis de ambiente do Windows 8 e vídeo do prompt de comando

EDITAR

Este definitivamente não é o comportamento do Windows 7. Assista a este vídeo para ver o comportamento Espero que funcione no Windows 7. link

EDIT 5/31/2013

Então, depois de muita frustração, eu escrevi um pequeno aplicativo C # para testar o evento WM_SETTINGCHANGE . Esse código recebe o evento no Windows 7 e no Windows 8. No entanto, no Windows 8 em meu sistema, não obtenho o caminho correto; mas, eu faço no Windows 7. Isso não poderia ser reproduzido em outros sistemas Windows 8.

Aqui está o código 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 é equivalente a WM_SETTINGCHANGE

Programa C # em execução no Windows 7 (você pode ver o evento chegando e ele seleciona o caminho correto).

Programa C # em execução no Windows 8 (você pode ver o evento chegando, mas o caminho errado).

Existe algo no meu ambiente que está precipitando esse problema. No entanto, isso é um bug do Windows 8?

EDIT 2014-04-28

Devido a este e a vários outros problemas, deixamos de usar o Windows 8 na área de trabalho. Não temos um ambiente para continuar testando e experimentando esse problema. Ainda não há resposta ou resolução para este problema para nós. As respostas abaixo não resolveram nosso problema.

    
por mawcsco 10.05.2013 / 16:44

7 respostas

7

Se você estiver iniciando o Prompt de Comando no menu Iniciar ou um atalho na sua barra de tarefas, você deve:

  • Reinicie explorer . Mate-o e relance-o.
  • Efetue logout e back in (que efetivamente relança explorer ).
  • Reinicie o sistema (que também efetivamente relança explorer ).

O ambiente não é atualizado imediatamente porque os ambientes são herdados de seu processo pai, com a exceção de explorer , que é iniciado pelo sistema no login. É assim que se comporta no meu sistema Windows 7.

Portanto, alterar as Variáveis de Ambiente atualiza as chaves do Registro, mas essas chaves não são relidas até que o sistema tenha que criar um novo ambiente de login para algum processo que está sendo iniciado. Na maioria das vezes, isso não está acontecendo porque os processos são filhos de um processo que já possui um ambiente, portanto, o ambiente é herdado.

    
por 10.05.2013 / 17:20
3

De: link via link

...

However, note that modifications to the environment variables do not result in immediate change. For example, if you start another Command Prompt after making the changes, the environment variables will reflect the previous (not the current) values. The changes do not take effect until you log off and then log back on.

To effect these changes without having to log off, broadcast a WM_SETTINGCHANGE message to all windows in the system, so that any interested applications (such as Windows Explorer, Program Manager, Task Manager, Control Panel, and so forth) can perform an update. MORE INFORMATION


For example, on Windows NT-based systems, the following code fragment should propagate the changes to the environment variables used in the Command Prompt:

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

None of the applications that ship with Windows 95 and Windows 98, including Windows Explorer and Program Manager, respond to this message. Thus, while this article can technically be implemented on Windows 95 and Windows 98, there is no effect except to notify third-party applications. The only method of changing global environment variables on Windows 95 is to modify the autoexec.bat file and reboot.

    
por 10.05.2013 / 19:24
1

O problema está na configuração do usuário. Na Janela 8, cada usuário possui suas próprias variáveis de ambiente.

Open System properties (Start-> [type "Control Panel"] -> Control Panel\System and Security\System -> Advanced system settings -> Environment Variables)

A abordagem acima irá editar variáveis de ambiente para o usuário root, talvez não o usuário atual.

Você deve ir para a conta de usuário - > selecione sua conta atual - > alterar variáveis de ambiente

Após a alteração, reinicie o shell de energia. Então

echo $env:JAVA_HOME

ou

Get-ChildItem env

Espero que isso ajude você.

    
por 01.10.2014 / 06:51
0

Tente SETX em vez de SET. Por exemplo, SETX PATH "%PATH%;MyPath"

    
por 10.05.2014 / 14:51
0

Se você estiver usando o Windows 8.1, abra o prompt de comando como Administrador e, em seguida, chame o comando PATH e deverá aparecer nele. Quando você voltar ao normal, ele também aparecerá. E, de fato, você deve ser capaz de iniciar o aplicativo adicionado a partir do prompt de comando.

    
por 02.05.2015 / 00:36
0

Tarde para ele. Contudo. Você pode ser uma vítima desse problema: As variáveis do usuário não são resolvidas corretamente no Windows .

    
por 26.01.2016 / 19:47
-1

Funciona se você usar o Win + R na área de trabalho para iniciar o cmd.exe? Meu palpite é que iniciar a partir da tela inicial faz com que o pai do cmd.exe iniciado seja diferente do explorer.exe (WSAHost.exe, IIRC ou seja qual for o nome), e esse processo pai não atualiza seu ambiente durante as mensagens WM_SETTINGCHANGE. Eu não tenho uma máquina com o Windows 8 à mão para testar ...

    
por 21.07.2014 / 16:16