Windows Komut İstemi, uygulama programlarını başlatırken PATH değişkeni tarafından belirtilen konumlardan başka bir yerde arama yapıyor mu?


35

Aşağıdaki deneyi denedim.

Başlamadan önce PATH değişkenini şu değere sahip olan cmd'den kontrol ettim:

Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;

İlk başta cmd'nin yalnızca PATH değişkeninde bulunan dizinlerdeki yürütülebilir dosyaları aradığını düşündüm, bu yüzden rastgele bir uygulama seçtim - winword.exe (Microsoft Word) ve komut satırından başlatmayı denedim:

start winword

Ama benim için sürpriz, program başladı! Şaşırmamın nedeni PATH değişkenindeki tüm dizinleri 'winword' adlı exe dosyası için aradım çünkü tüm aramalarım boşaldı!

Bu nedenle, komut isteminin çalıştırılabilir dosyaları aramak için PATH değişkeninde belirtilenler dışındaki yerlerde arama yapması gerektiği sonucuna vardım.

Açıkçası, yaptığım bir sonraki şey 'winword' çalıştırılabilir dosyasının bulunduğu kesin yeri aramaktı. Winword.exe burada bulunduğu ortaya çıktı:

C:\Program Files\Microsoft Office 15\root\office15

Bu nedenle, 'start' komutunu çalıştırırken belki CMD'nin otomatik olarak ProgramFiles ve ProgramFiles (x86) (ve tüm alt dizinlerini) aradığı fikrini veriyor? Bu da bana, Audacity'de yüklü bir exe dosyası bulunan başka bir uygulamayı başlatmak için çalıştı:

C:\Program Files (x86)\Audacity

Yine, benim için sürpriz, Audacity yazarken başlatılamadı:

start audacity

komut satırında.

görüntü tanımını buraya girin

Daha sonra audacity.exe dosyasını içeren dizini PATH dizinine ekledim:

set path=%path%;C:\Program Files (x86)\Audacity

Bundan sonra tekrar cüretlilik başlatmaya çalıştım:

start audacity

Şaşırtıcı olmayan bir şekilde, Audacity başlattı.

Bilmek istediğim şey, komut isteminin çalıştırılabilir dosyaları tam olarak nerede aradığı? Winword.exe neden içeren dizin PATH'in bir parçası olmasa da aynı şey başlatıyor, ancak aynı şey audacity.exe için doğru değil mi?

Başka uygulamaları da denedim. Başlat komutunu kullandığımda Chrome ve Firefox çalışıyor.

GÜNCELLEME: Windows sürüm 6.3.9600 (Windows 8.1) kullanıyorum


Yanıtlar:


44

İlk başta cmd'nin yalnızca PATH değişkeninde bulunan dizinlerdeki yürütülebilir dosyaları aradığını düşündüm, bu yüzden rastgele bir uygulama seçtim - winword.exe (Microsoft Word) ve komut satırından başlatmayı denedim:

Nedeni winword.exeçalışmış bir kayıt defteri anahtarı Microsoft Word (Winword.exe) yolunu tarif hangi var olmasıdır. Bu uygulamalar kuruluysa, Firefox.exe ve Chrome.exe için de benzer bir anahtar vardır.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

Bilmek istediğim şey, komut isteminin çalıştırılabilir dosyaları tam olarak nerede aradığı?

Sistem PATH Değişkeni, Kullanıcı PATH Değişkeni ve içindeki çeşitli anahtarlar ..\App Paths. Audacity'nin kurulduğunda kendisi için bir anahtar oluşturmadığını doğruladım.

ShellExecuteEx işlevi, lpFile parametresindeki yürütülebilir bir dosya adıyla çağrıldığında, işlevin dosyayı aradığı çeşitli yerler vardır. Uygulamanızı App Paths kayıt defteri alt anahtarına kaydetmenizi öneririz. Bunu yapmak, uygulamaların sistem PATH ortam değişkenini değiştirme gereksinimini ortadan kaldırır.

  • Geçerli çalışma dizini.
  • Yalnızca Windows dizini (alt dizin aranmaz).
  • Windows \ System32 dizini.
  • PATH ortam değişkeninde listelenen dizinler.
  • Önerilen: HKEY_LOCAL_MACHINE \ YAZILIM \ Microsoft \ Windows \ CurrentVersion \ App Paths

Kaynak: Başvuru Kaydı


15

Komut isteminden, sadece girerseniz WinWordçalıştırılamaz.

Eğer girerseniz START WinWordo çalışır.

StartKomut burada anahtarıdır.

Bir dosyayı start komutu ile yürütmeye çalıştığınızda, Komut İstemi herhangi bir arama yapmaz. Bunun yerine, dosya adını (ve argümanlarını) Windows'a iletir (ShellExecuteEx API çağrısı yoluyla), bu daha sonra dosyanın konumunu aramalıdır. Aşağıdaki sırada aradığı çeşitli yerler var:

  • Geçerli çalışma dizini.

  • Yalnızca Windowsdizin (alt dizin aranmaz).

  • Windows\System32Dizin.

  • PATHOrtam değişkeninde listelenen dizinler .

  • Tavsiye edilen:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

WinWordBu kayıt defteri anahtarında. Anahtar PATHçok uzun sürmemek için orada .


7
Lütfen tüm kaynaklardan alıntı yapın ve alıntı yapın. Arama sırasını bellekten yazmadıysanız, listeyi ve aranan sırayı gösteren kaynağınızı belirtmelisiniz.
Ramhound

Kaynak, birkaç yıl önce üzerinde çalıştığım bir şeydeki notlarım olurdu. Nereden aldığımı bilmiyorum, o zaman web sayfaları gelir ve gider.
Larryc

5
Onları herkesin aldığı aynı belgelerden aldın.
Ramhound

7

Windows komut işlemcisinde (CMD.EXE) program (komut isteminde sürücü / yol olmadan modül adını belirttiğinizde) bulunduğunda başlatılabilir:

  • PATH ortam değişkenine göre (hem çalıştırılabilir hem de aynı addaki hardlink / softlink / kısayolu)

  • DOSKEY alias tarafından

  • Uygulama yolundan HKLM\Software\Microsoft\Windows\CurrentVersion\App Pathsveya komutunu HKCU\Software\Microsoft\Windows\CurrentVersion\App Pathskullanarak ( startkomutu kullanırken )

Bu bilgiyi kullanarak (özellikle sonuncusu), size uygun olan kendi takma adlarınızı oluşturabilirsiniz. Örneğin HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe, varsayılan komut ile oluşturabilir C:\Program Files (x86)\Audacity\Audacity.exeve sadece start aukomut isteminde yazarak bu uygulamayı başlatabilirsiniz .


0

Diğer cevaplar davanızdaki belirli bir nedensel olasılık olsa da, sorunuzun diğer bazı uygulamalar için geçerli olabileceği başka bir cevabı da var: aradığınız yerde ancak farklı dosya uzantılarıyla.

Özellikle, uzantılı dosyaları aradığınızı söylemiştiniz exe. Windows ayrıca diğer uzantıların dosyalarını da yürütmeye çalışacaktır.

Bir komut yürütülürken devreye giren bir başka ortam değişkeni değişkendir PATHEXT. Bu, ;çalıştırılmaya çalışılacak dosya uzantılarının sınırlı bir listesidir. Eğer yankı PATHEXTverirseniz .COM;.EXE;.BAT;.CMD;.VBS;... (vb.) Gibi bir şey görebilirsiniz . Bazı uygulamalar bu diğer dosya türlerini son kullanıcı giriş noktası olarak kullanır. Çok daha az yaygındır, ancak olur. .BATSenaryolardan başlayan birkaç büyük ticari ürün kullandım . Bunlardan birini örnek olarak kullanmak için, komut standaloneolmasa bile komutla başlatabilirim standalone.exe... bunun yerine, onun bir a standalone.bat.

Şu an üzerinde bulunduğum uzantılarımın bazıları PATHEXTşu anda hiç uygulama kullanımına sahip olmadı. Olanlar Bunu gelmiş çok daha yaygın girmek (ama besbelli kadar değil exe) şunlardır: .com, .bat, .vbs, .js, .jar. Bunlardan ilki, windows toplu komut dosyası dosyaları ve diğer üçü, exes ( yerine : visual basic, javascript ve java) yerine betiklerden veya sanal makinelerden çalıştırılan belirli programlama dilleri için dosya türleridir .


Aşağıya seçmen yorum yapmaya özen gösterir (genellikle sormanın faydası olduğunu biliyorum ama bazen bir cevap alıyorum)? Bir yerde bir hata mı yaptım?
Loduwijk

Çünkü süre Ben değil, ama vahşi bir tahmin de öyle PATHEXTve PATHher iki çalışan şeyler almak ile ilgili, onlar kendi görevleri biraz diktir. PATHbelirtir çalıştırmak şeyler arar ve süre OP, soruyordu ne kadar belirtir ne çalıştırılabilir. PATHEXT
dgnuff

@dgnuff İlginç, benim açımdan bu yana: OP, soruyu özellikle SE bağlamında çerçeve mücadelesi için yalvarmış bir şekilde dile getirdi, çalışan dosyanın çalışmadığı varsayımıyla "XY sorusu" soruyorlardı. Zaten yolda aranan yerler. Neyse, teşekkürler.
Loduwijk

0

start winwordkomut isteminin başlatılmasını söylemiyor winword. Komut istemine startargümanla başlamasını söyler winword. Startbulmak için kendi yöntemlerini kullanır winword.

Sadece winwordkomut istemine başlamasını söyler winword. Ve eğer bunu denersen, winwordaçık olmadığı için PATH, fırlatılmıyor

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.