Windows 8 Komut satırım neden yolunu güncellemiyor?


21

PATH değişkenime yeni bir giriş eklemem gerekiyordu. Bu benim işimde ortak bir faaliyettir, ancak yakın zamanda Windows 8'i kullanmaya başladım. İşlemin Windows 7, Vista, XP'ye benzer olacağını varsaydım ...

İşte olaylar dizim:

  1. Sistem özelliklerini açın (Başlat-> ["Denetim Masası" yazın]] -> Denetim Masası \ Sistem ve Güvenlik \ Sistem -> Gelişmiş sistem ayarları -> Ortam Değişkenleri)
  2. Yeni yolu KULLANICI PATH değişkenimin başlangıcına ekle (C: \ dev \ Java \ apache-ant-1.8.4 \ bin;)
  3. Bir komut istemi açıldı (Başlat -> ["komut istemi" yazın "girin] -> [" yol "yazın]

Yeni yol girişim mevcut değil (ekli resme ve videoya bakın). Windows 7 makinelerinde de aynı işlemi kopyaladım ve çalıştı.

Ortam değişkenlerinin ekran görüntüsü

DÜZENLE

Windows 8 Ortam Değişkenleri ve Komut İstemi videosu

DÜZENLE

Bu kesinlikle davranışı görmek için bu videoda Windows 7'de Watch davranış değildir ben bekliyoruz Windows 7'de çalışan http://youtu.be/95JXY5X0fII

EDIT 5/31/2013

Bu yüzden, büyük sıkıntıdan sonra, WM_SETTINGCHANGEolayı test etmek için küçük bir C # uygulaması yazdım . Bu kod, olayı hem Windows 7'de hem de Windows 8'de alır. Ancak, sistemimde Windows 8'de doğru yolu bulamıyorum; Ancak, Windows 7'de yapıyorum. Bu, diğer Windows 8 sistemlerinde çoğaltılamadı.

İşte C # kodu.

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 eşittir WM_SETTINGCHANGE

Windows 7'de çalışan C # programı (etkinliğin gerçekleştiğini ve doğru yolu seçtiğini görebilirsiniz).

Windows 8'de çalışan C # programı (etkinliğin yanlış bir yoldan geldiğini görebilirsiniz).

Çevremle ilgili bu sorunu çökerten bir şey var. Ancak, bu bir Windows 8 hatası mı?

EDIT 2014-04-28

Bu ve diğer bazı sorunlar nedeniyle, artık masaüstünde Windows 8 kullanmıyoruz. Bu sorunla test etmeye ve denemeye devam edecek bir ortamımız yok. Bizim için hala bu sorunun cevabı ya da çözümü yok. Aşağıdaki cevaplar sorunumuzu çözmedi.


2
Değişikliklerin yürürlüğe girmesinden sonra yeniden başlatmanız gerektiğini düşünüyorum.
Enigma

@Enigma Neden? Windows 7, Vista, XP, 2000’de yeniden başlatmam gerekmedi ...
mawcsco

@mawcsco En az 7 kişi yaptınız. Açma komutu, başlat menüsünden başlatılır ve oturum açtığınızda yüklenen Explorer kabuğundan gelen ortamla başlatılır. Gezgin'i yeniden başlatmanız / yeniden başlatmanız, oturumu kapatmanız veya yeniden açmanız veya sistemi yeniden başlatmanız gerekir.
Darth Android

1
@Enigma Bir yeniden başlatma gerekli olmamalıdır. serverfault.com/questions/8855/…
mawcsco

1
Bunu hem Windows 7 hem de Windows 8'de kontrol ettim: her iki durumda da yeni ortam değişkeni, cmdyeni bir örnek başlatıldığında görülebilirdi . Tabii ki zaten çalışan cmdgüncellenen ortamı alamadım.
Alexey Ivanov

Yanıtlar:


7

Komut İstemi'ni başlat menüsünden veya görev çubuğunuzdaki bir kısayoldan başlatıyorsanız, şunlardan birini yapmalısınız:

  • Yeniden başlatın explorer. Öldür ve yeniden başlat.
  • Oturumu kapatıp tekrar açın (etkin bir şekilde yeniden başlatılır explorer).
  • Sistemi yeniden başlatın (aynı zamanda etkili bir şekilde yeniden başlatılır explorer).

Ortam hemen güncellenmez, çünkü ortamlar, explorergiriş yaptıklarında sistem tarafından başlatılanlar hariç, üst işlemlerinden miras alınır . Windows 7 sistemimde böyle davranıyor.

Bu nedenle, Ortam Değişkenlerini değiştirmek kayıt defteri anahtarlarını günceller, ancak sistem başlatılan bazı işlemler için yeni bir giriş ortamı oluşturmak zorunda kalana kadar bu anahtarlar yeniden okunmaz. Çoğu zaman, bu gerçekleşmez, çünkü süreçler zaten bir ortamı olan bir sürecin çocuklarıdır, bu yüzden çevre miras alınır.


2
Kesinlikle Windows 7 için yanlıştır. Yukarıdaki gönderimde bağladığım videoya bakın.
mawcsco

1
Huh. Kesinlikle orada haklısın, ancak değişikliklerim kesinlikle Win 7'deki yeni konsol pencerelerine hemen uygulanmadı. Yine de tam iş akışımın ne olduğunu hatırlayamıyorum. Eve döndüğümde Win 8 sistemim ile oynayacağım.
Darth Android

5
Ortam değişkenlerini Sistem özellikleri iletişim kutusunu kullanarak değiştirdiyseniz, değişiklikler hemen çalışan Explorer örneğine uygulanır ve ardından başlatılan tüm işlemler yeni ortamı alır. Zaten çalışan işlemler, WM_SETTINGCHANGEmesaj işlemedikleri sürece otomatik olarak ortam değişkenlerini güncellemez .
Alexey Ivanov

1
Dostum, bu, zaten yaşadığım sorunu anlamama yardımcı oldu. Komut istemini başlatmak için AutoHotkey kullanıyorum ve autohotkey yeniden başlatılıncaya kadar çalışmadı!
Moss

1
@mawcsco Benim için çalıştı, ben Windows 7 kullanıyorum.
laike9m

3

Gönderen: http://support.microsoft.com/kb/104011 aracılığıyla /server//q/8855/158027

...

Ancak, ortam değişkenlerinde yapılan değişikliklerin derhal değişmeyeceğini unutmayın. Örneğin, değişiklikleri yaptıktan sonra başka bir Komut İstemi başlatırsanız, ortam değişkenleri önceki (geçerli değil) değerleri yansıtır. Değişiklikler siz oturumu kapatıp tekrar açana kadar etkili olmaz.

Bu değişiklikleri kapatmak zorunda kalmadan, sistemdeki tüm pencerelere bir WM_SETTINGCHANGE mesajı yayınlayın, böylece ilgilenen tüm uygulamaların (Windows Gezgini, Program Yöneticisi, Görev Yöneticisi, Denetim Masası vb.) Bir güncelleme yapmasını sağlayın. DAHA FAZLA BİLGİ


Örneğin, Windows NT tabanlı sistemlerde, aşağıdaki kod parçasının değişiklikleri Komut İsteminde kullanılan ortam değişkenlerine yayması gerekir:

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

Windows Gezgini ve Program Yöneticisi de dahil olmak üzere Windows 95 ve Windows 98 ile birlikte gelen uygulamaların hiçbiri bu iletiye yanıt vermedi. Bu nedenle, bu makale teknik olarak Windows 95 ve Windows 98'de uygulanabilse de, üçüncü taraf uygulamalarını bildirmekten başka bir etkisi yoktur. Windows 95'te genel ortam değişkenlerini değiştirmenin tek yöntemi autoexec.bat dosyasını değiştirip yeniden başlatmaktır.


2
Windows 7'deki Windows Gezgini bu iletiyi ele alır ve Komut İstemi'ni Görev Çubuğu veya Başlat menüsünden yeniden başlatmak yeterlidir.
Alexey Ivanov

"Söz konusu bilgisayarın ana Özellikler iletişim kutusunu kullanarak değişiklik yaparsanız, ortam değişkenlerinde yapılan değişiklikler derhal yürürlüğe girmelidir (Bilgisayarım | Özellikler | Gelişmiş | Ortam Değişkenleri'ne gidin.) Değişiklikler kaydedildikten sonra Explorer bir WM_SETTINGCHANGE mesajı yayınlar. Tüm pencereleri değişiklikten haberdar etmek için. " serverfault.com/questions/8855/…
mawcsco

2
"Sistem İpucu Bu makale, kullandığınızdan farklı bir Windows sürümü için geçerlidir. Bu makaledeki içerik sizinle ilgili olmayabilir. Windows 8 Çözüm Merkezi'ni ziyaret edin"
mawcsco

Bunun bir uygulama detayı olması ve Microsoft'un bu davranışı Windows 8 veya daha üst sürümlerinde destekleme niyeti bulunmaması beni şaşırtmaz.
surfasb

1

Sorun, kullanıcı ayarınızla ilgilidir. Pencere 8'de, her kullanıcının kendi ortam değişkenleri vardır.

Sistem özelliklerini açın (Başlat-> ["Denetim Masası" yazın]] -> Denetim Masası \ Sistem ve Güvenlik \ Sistem -> Gelişmiş sistem ayarları -> Ortam Değişkenleri)

Yukarıdaki yaklaşım, kök kullanıcı için ortam değişkenlerini düzenleyecektir, belki de geçerli kullanıcınız değil.

Kullanıcı hesabına gitmelisin -> mevcut hesabını seç -> ortam değişkenlerini değiştir

Değiştirdikten sonra, güç kabuğunu yeniden başlatın. Sonra

echo $env:JAVA_HOME

veya

Get-ChildItem env

Umarım bu size yardımcı olur.


Sanırım "mwillia3 için kullanıcı değişkenleri" olan diyaloğu gösteren ekran görüntülerim ve videomdaki ayrıntıyı kaçırmış olabilirsiniz. Bu benim kullanıcı adım. Doğru ortam değişkenlerini düzenlediğimi kesin olarak biliyorum. C # uygulaması, güncellenmiş değeri değil eski değeri olan etkinliği başlatır. Pes ettim. Bunun bir Win 8 hatası olduğuna oldukça eminim ve artık bunu test etmek için Windows 8'e erişimim yok.
mawcsco

Bazı insanlar her zaman ayrıntıları okumaz. Bunu bazı sistemlerde görüyorum, diğerlerinde değil, Windows 7 / 2008'de bile gördüm. Bulduğum zaman gerçekleştiği için hiçbir kafiye ya da sebep yok.
ferventcoder

WM_SETTINGSCHANGED yayıldıktan sonra bile Windows Server 2012 r2 ile aynı sorun. Bunun bir Windows böceği olduğuna inanıyorum.
vezenkov

0

SETX yerine SETX'i deneyin. ÖrneğinSETX PATH "%PATH%;MyPath"


1
Açıklayabilir neden SETX ziyade SETişler.
ChrisF,

İlk önce komut satırını kullanmıyordum, sistem iletişim kutusunu kullanıyordum. İkinci olarak, davranış biçimim Windows 7'de işe yarıyor, ancak bazen Windows 8'de çalışmıyor. SET ve SETX'in Windows 7 ve Windows 8 arasında nasıl değiştiğini gösteren belgelere işaret edebilir misiniz?
mawcsco

0

Windows 8.1 kullanıyorsanız, komut istemini Yönetici olarak açın, ardından PATH komutunu çağırın ve orada göründüğünü görmelisiniz. Normal cmd'ye geri döndüğünüzde, aynı zamanda görünecektir. Nitekim, eklenen uygulamayı komut isteminden başlatabiliyor olmalısınız.



-1

Cmd.exe'yi başlatmak için Masaüstünde Win + R kullanıyorsanız çalışır mı? Tahminime göre Başlat Ekranından başlamak, başlatılan cmd.exe dosyasının üst öğesinin explorer.exe'den (WSAHost.exe, IIRC veya adı ne olursa olsun) farklı olmasına neden olur ve bu üst işlem WM_SETTINGCHANGE mesajları sırasında ortamını güncellemez. Test etmek için elimde bir Windows 8 makinem yok ...


Windows 8'de bile, Başlat Ekranı Kullanıcı Arabirimi tüm explorer.exe'nin bir parçası gibi görünüyor çünkü explorer.exe öldürüldüğünde kayboluyor.
binki,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.