it-swarm-tr.com

Windows neden Path içindeki bir ortam değişkenini işleyemiyor?

Meslektaşım ve ben Windows ile aynı Dell iş istasyonlarına sahibiz XP Professional x64 sürümü yüklü.

My Path ortam değişkeni şöyle başlar:

%Java_HOME%\bin;...

Meslektaşımın Yol değişkeni, aynı ortam değişkeni kullanılarak belirtilen aynı dizini içeriyor, ancak Yolundaki ilk öğe değil.

Sistem özelliklerine -> ortam değişkenlerine erişip Java_HOME değişkenimin değerini değiştirirsem, komut satırında bulunan Java sürümü beklediğim gibi değişir. Bu, değişiklikleri aldığınızdan emin olmak için yepyeni bir konsol penceresi başlatıyor.

Ama meslektaşımın makinesinde, öyle değil. Önceki Java sürümünü bulmaya, Path değişkenini getirene ve kaydetmeden devam eder (üzerinde değişiklik yapmasa bile). (Yine, bu yepyeni bir konsol penceresi başlatırken olur.)

Bu tutarsızlığı yaklaşık 6 aydır Windows'da gözlemliyorum ve çok merak ediyorum. Ofisimizde çok fazla Windows sürümü var, bu yüzden şimdiye kadar aynı işletim sistemi sürümünü çalıştıran iki makinede bunun gerçekleşmesini nadiren görebildim.

Buna ne sebep oluyor? Neden onun makinesi, benimki zaman yeni Java_HOME kullanarak Path'i yeniden değerlendirmiyor?

(Bu, Yoldaki ilk şey olmadığı için mi? Öyleyse, bu nasıl olabilir ve neden? Kontrol etmek için daha fazla test yaparım, ama bence artık bıkmış ve işe geri dönmek istiyor. .)

43
skiphoppy

Yolunuz, kullanıcı yolunun izlediği sistem yolunun birleştirilmesidir. Ek olarak, sistem ortamı değişkenleri kullanıcı ortamı değişkenlerine referanslar içermeyebilir ve bu tür referanslar değil genişletilecektir. İstenilen sonucu elde etmek için, ser ortam değişkeni PATH içindeki% Java_HOME% referansını ekleyin ya da zaten yoksa, böyle bir değişken oluşturun.

Belki basitleştirilmiş bir örnek bunu daha açık hale getirecektir. Diyelim ki SİSTEM ortamı

ProgramFiles = C:\Program Files
SystemRoot = C:\WINDOWS
PATH = %SystemRoot%\SYSTEM32

ve Kullanıcı JSmith'in ortamı

Java_HOME = %ProgramFiles%\Java\bin
USERPROFILE = C:\USERS\JSmith
PATH = %Java_HOME%\bin;%USERPROFILE%\bin

sonra ortaya çıkan yol

C:\WINDOWS\SYSTEM32;C:\Program Files\Java\bin;C:\Users\JSmith\bin

istediğiniz gibi.

37
JPaget

Bu anahtarın altındaki Windows kayıt defterinde kontrol edin:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Environment

Ortam değişkeninin genişletilmesi gerekiyorsa (burada:% Java_HOME%)

daha sonra değişkeni (REG_EXPAND_SZ değeri olarak ayarlanmalıdır.

Kayıt defteri değerleri eklemek/düzenlemek için komut satırı üzerinden reg.exe kullanılıyorsa, REG_SZ yazması varsayılan değerdir. reg add /t REG_EXPAND_SZ seçeneğini kullanarak REG_EXPAND_SZ türünü belirtin.

15
climenole

Değişken boşluk içeren bir yola genişlediğinde PATH değişkeni içindeki ortam değişkenlerini genişletmede kesin bir sorun var.

"OUR_ROOT = c:\MyRoot" gibi kendi sistem seviyesi değişkenlerimizi yarattık ve onu PATH sisteminde "PATH =;% OUR_ROOT%\bin;" gibi kullandık. ve doğru bir şekilde "PATH =; c:\MyRoot\bin;" olarak genişletildi. Şimdiye kadar sorun değil.

Ancak, Windows 7'de (32-bit), bir ürünün kendisini yüklemesini ve bunun gibi sistem ortamı değişkenlerini yaratmasını sağladım:

STUDIO_BIN=C:\program files\Company Name\Product Name 10.4\bin

ve onu sistem PATH değişkenine ekledi:

PATH=<other path elements>;%STUDIO_BIN%;<more path elements>

Ancak CMD'de gösterilen PATH değerleri "% STUDIO_BIN%;" ve genişletilmiş yol değil. Bilgisayarım> Özellikler> Gelişmiş> Env.Vars öğesindeki değer de beklenmeyen şekilde kaldı. Bu, o dizinde DLL gerektiren programları çalıştıramadığım anlamına geliyordu.

Sadece STUDIO_BIN'i (Bilgisayarım> Özellikler> Gelişmiş ...> Env Vars ile) gömülü boşlukları olmayan bir isme değiştirerek:

STUDIO_BIN=C:\ProductName\bin

ve ardından CMD penceresini yeniden başlatarak, PATH şimdi:

PATH=<other path elements>;C:\ProductName\bin;<more path elements>

Başka bir çözüm de Bilgisayarım> Özellikler> Gelişmiş ...> Ortam Değişkenleri iletişim kutusunu kullanarak PATH'ta kullandığınız sistem değişkenini yeterince düzenlemektir. Bir karakter eklemeye ve onu 'değişiklik' yapmak için çıkarmaya çalıştım ve sonra Tamam'ı tıkladım, yeni bir CMD İstemi başlattım ve PATH doğru bir şekilde genişletilmedi. Daha sonra, yolun kısmını silmeyi denedim.

STUDIO_BIN=C:\Program Files\Company Name

("Ürün Adı 10.4" çıkarılarak) ve görüldüğü gibi, bir sonraki CMD İsteminde PATH, STUDIO_BIN ile düzgün şekilde genişletildiğini gösterdi!

Garip bir şekilde, tekrar girip "Ürün Adı 10.4" ü STUDIO_BIN'e ekledim (STUDO_BIN'e orijinal olarak orda olan tüm alanları da dahil ettim) ve PATH STILL doğru bir şekilde genişledi.

İçeriğinde yeterince değişiklik olduğu açıkça belli olan PATH değişkeni, Ortam Değişkenleri iletişim kutusunda çalışmasına izin veren bazı ek işlemlerden geçirir. Değişken, ürün yükleyicisi tarafından eklendiğinde yapılan işlem (muhtemelen PATH doğrudan kayıt defterinde değiştirilmiştir).

Neredeyse pozitifim ki bu da XP ile bir problemdi. Yeni bir geliştirme makinesi oluşturduğum için Windows 7'de benim için yeni ortaya çıktı. Görünüşe göre Microsoft tarafından düzeltilmedi.

Görünüşe göre,% ProgramFiles% gibi MS tanımlı değişkenler bile PATH içinde doğru şekilde genişlemiyor.

Bu sayfa PATH komut satırı veya toplu iş dosyası üzerinden ayarlanıyorsa olası bir cevap sağlar. (SET komutundan sonra komutun tamamını tırnak işaretleri içine alın.) Kurulduğum ürünün hangi yükleyiciyi ortam değişkenlerini ayarlamak için kullandığını bilmiyorum, ancak boşlukları olan yolları düzgün şekilde genişletmek için hangi işlemlerin yapılması gerektiği açıkça belliydi.

Yani - özetlemek için, ya:

  • yolları değiştir (ve tüm ilişkili dosyaları taşı) boşluk içermeyen yollara

  • ortam Değişkenleri iletişim kutusunda genişletilemeyen değişkenleri düzenleyin (doğru bir şekilde işlemlerini sağlamak için onları yeterince değiştirme - ne kadarı olduğunun pozitif değilim).

9
RobDavenport

bunu Mart 2009'da Microsoft forumlarında sordum ve çözmedim:

% Yolculuk değişkeni% ProgramFiles% nasıl kullanılır? :


Sistemin Path ortam değişkenine bir klasör eklemeye çalışıyorum.

eklemek istiyorum % ProgramFiles%\SysInternals

mevcut yol değişkenine:

C:\PROGRA ~ 1\BPL\Borland\Delphi5\projeler; C:\PROGRA ~ 1\Borland\Delphi5\Bin ,% SystemRoot% \system32 % SystemRoot% ;% SystemRoot %\System32\Wbem; C:\Program Dosyaları\Microsoft SQL Server\80\Tools\BINN; C:\Program Dosyaları\Microsoft SQL Server\80\Araçlar\Binn \; C:\Program Dosyaları\Microsoft SQL Server\90\Araçlar\binn \; C:\Program Dosyaları\Microsoft SQL Server\90\DTS\Binn \; C :\Program Dosyaları\Microsoft SQL Server\90\Araçlar\Binn\VSShell\Common7\IDE \; C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ÖzelAssemblies \;% SYSTEMROOT%\System32\WindowsPowerShell\1.0 \

Bu yüzden düzenlediğiniz yere giriyorum:

alt text

Ve değişkenimi yola ekledim:

% ProgramDosyaları %\SysInternals; C:\PROGRA ~ 1\BPL\Borland\Delphi5\projeler; (Kesik)

Ardından yeni bir komut istemi penceresi açmak için ortam değişkeni gerçek değeri ile değiştirilmez:

Yol =% ProgramDosyaları %\SysInternals; C:\PROGRA ~ 1\Borland\Delphi5\Projects\BPL (makasla kesme)>

Aşağıdaki ekran görüntüsünde görebileceğinizler:

alt text


Ama sorunuzu cevaplamak için: bilmiyorum. Yapılamaz gibi görünüyor.

7
Ian Boyd

global ve kullanıcı olmak üzere iki ortam değişkeni seviyesi vardır. Bir kullanıcı ortamı değişkeni olarak ayarlanmış% Java_home% değeri varsa, bunun yerine genel olanı değiştiriyorsa, hiçbir fark görmez.

5
Sekhat

MSTSC kullanarak/console oturumuna giriş yaparken ortam değişkenlerini ekleyin.

Makineyi yeniden başlatın ve ortam değişkenlerinizin devam edeceğini göreceksiniz.

Ortam değişkenini değiştirmeye çalıştığınızda makineye nasıl bağlandığınıza bağlı olarak O/S'de bir tuhaflık var gibi görünüyor.

2
Justin

Kendi kullanıcı ortamı değişkenlerinizi tanımlarken PATH'ta boşluk olmadığından emin olun. örneğin: C:\GNAT\bin; C:\GNAT \, ";" arasındaki boşluktan dolayı işe yaramaz işleri içerir. ve "C:\GNAT\include".

2
Nij

Aynı problemi yaşadım ve nasıl çözüleceğini biliyorum.

Sadece PATH'inizi yeniden düzenleyin, ancak değişiklik yapmayın ve PATH’i yeniden kaydedin. Nedense bu, iç içe geçmiş tüm ortam değişken başvurularının yeniden değerlendirilmesine neden olur.

İşe yaramazsa, birkaç kez daha yapın, bir şekilde sadece kendi kendine çalışır.

1
BAP

PATH, kullanıcı PATH değişkeninin ardından global PATH değişkeninin birleştirilmiş halidir. Bir değişkeni bir diğeri içinde kullanmak için, önceki ayarlanmış olmalıdır. Kullanıcı değişkenleri genel değişkenlerden önce ayarlanır (en azından burada 64 bit Windows 7'de), bu nedenle genel değişkenleri kullanıcı PATH değişkeninde kullanamazsınız. Ek olarak, değişkenler alfabetik olarak sıralanmıştır, bu nedenle bunu aklınızda tutmanız gerekir.

1
cbarrick

"Gecikmeli ortam değişken genişlemesi" özelliği (veya bunların eksikliği) ile ilişkili olabilir veya belki de her zaman doğru bir çözüme sahip olmak için bu özellikten yararlanabilirsiniz.

bir cmd istemi

set /? 

ve test etmek için küçük bir örnek içeren "gecikmeli ortam değişken genişlemesi" ni açıklayan bölümü okuyun.

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)

Yankı çizgisini alamazsanız, bu açıklayabilir ...

Ancak, cmd.exe'nizi/V seçeneğiyle başlatırsanız, "!" davranışını değiştiren "%" yerine

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)

Benim için (XP'de çalışıyor), ilk komut dosyası işe yaramadı, ancak ikinci sürüm (cmd.exe/V ile) çalıştı

1
libjack

Henüz Windows’un PATH’deki bir değişkeni genişletemediğine inanıyorum, çünkü henüz tanımlanmadığını düşünüyor. Düşünmek:

REM Ensure variable is undefined
SET UNDEFINED=
REM And then try to expand it
ECHO UNDEFINED=%UNDEFINED%

Bu hipotez benim diğer gözlemlerime uyuyor - sersPATH 'e %ProgramFiles%\Something eklenmesi, değişken değişim bildirimi sırasında makine ortamında tanımlandığı taktirde, her zaman %ProgramFiles%' un beklenen genişlemesine neden olacaktır. MAKİNE ve ardından KULLANICI). Ancak makine ortamını değiştirdiğinizde, doğru değişken genleşmesi yalnızca önyükleme zamanında gerçekleşir (şu anda hiçbir fikrim yok nasıl ve neden bu düzenli olarak olmaz).

1
user539484

Ortam değişkenlerini Sistem> Gelişmiş Ayarlar> Ortam Değişkenleri içinde ayarlamayı çözdüm.

İki panel vardır, Kullanıcı ve Global değişkenler (kullanıcı Windows kullanıcı adınızdır) ve Sistem Değişkenleri Global değişkenlerdir, bu nedenle Java_HOME gibi Kullanıcı değişkenlerinden 'Yeni' ayarladıysanız ve yolunuzu aşağıya koyarsanız, değişkenlerinizi global olarak ayarlasanız bile yolunda klasör içinde program dosyaları var.

0
thunder_nemesis

Belki de yanlış yapıyorsun?

Windows XP Pro SP3 (32bit) ile denedim. %Java_HOME% (ve %JAVAFX_HOME%, vb.) Çeşitli oluşumları olan bir yolum var. Komut satırına gidip PATH yazın, genişlemiş değişkenleri görüyorum. İyi.

Java_HOME'nin değerini değiştiriyorum. Aynı komut satırı penceresine geri dönün, PATH tekrar, aynı değer ... beklendiği gibi (deneyime göre!).

Yeni bir komut satırı penceresi açarım, PATH, gotcha yazın, yeni değeri görüyorum.

Buradaki mekanizmanın tam olarak ne olduğundan emin değiliz, ancak görünen o ki, cmd.exe de dahil olmak üzere çalışan herhangi bir program, başlangıçtaki ortam değişkenlerinin değerlerini yakalar ve geriye bakmaz. env değişikliklerini dinleyin, gerçi çok da değil).

Bir özellik veya bir hata veya can sıkma olarak görülebilir, ancak bu şekilde çalışır. Hey, en azından Win9X zamanlarının aksine, bilgisayarı yeniden başlatmamız gerekmiyor! Ve NT zamanlarının aksine (IIRC), oturumu kapatıp geri dönmek zorunda değilsiniz.

Neden tutarsızlık? Microsoft'un yolları anlaşılmaz ... :-P

0
PhiLho