Sucht die Windows-Eingabeaufforderung beim Starten von Anwendungsprogrammen an einem anderen Ort als den von der PATH-Variablen angegebenen Speicherorten?

3883
Anthony

Ich habe das folgende Experiment ausprobiert.

Bevor ich anfange, habe ich die PATH-Variable aus cmd geprüft, die den folgenden Wert hat:

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\; 

Zuerst dachte ich, dass cmd nur nach ausführbaren Dateien in den in der PATH-Variablen enthaltenen Verzeichnissen sucht. Deshalb habe ich zufällig eine Anwendung - winword.exe (Microsoft Word) - ausgewählt und versucht, sie über die Befehlszeile zu starten:

start winword 

Aber zu meiner Überraschung startet das Programm! Ich bin überrascht, weil ich alle Verzeichnisse in der Variablen PATH nach der Exe-Datei mit dem Namen 'winword' durchsucht habe, aber alle meine Suchen waren leer!

Ich bin daher zu dem Schluss gekommen, dass die Eingabeaufforderung gewusst haben muss, an anderen Stellen als den in der PATH-Variablen angegebenen Orten zu suchen, um nach ausführbaren Dateien zu suchen.

Das nächste, was ich tat, war natürlich, nach dem genauen Ort zu suchen, an dem sich die ausführbare Datei 'winword' befindet. Es stellt sich heraus, dass sich winword.exe hier befindet:

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

Daher die Idee, dass CMD ProgramFiles und ProgramFiles (x86) (und alle ihre Unterverzeichnisse) beim Ausführen des Befehls 'start' automatisch durchschaut? Daraufhin habe ich versucht, eine andere auf meinem Computer installierte Anwendung, Audacity, zu starten. Die Exe-Datei befindet sich unter:

C:\Program Files (x86)\Audacity 

Zu meiner Überraschung konnte Audacity nicht starten, als ich tippte:

start audacity 

in der Befehlszeile.

Sucht die Windows-Eingabeaufforderung beim Starten von Anwendungsprogrammen an einem anderen Ort als den von der PATH-Variablen angegebenen Speicherorten?

Ich habe dann das Verzeichnis mit audacity.exe zu PATH hinzugefügt:

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

Danach habe ich nochmal versucht, Kühnheit zu starten:

start audacity 

Nun, nicht überraschend, startete Audacity.

Was möchte ich wissen, wo genau die Eingabeaufforderung nach ausführbaren Dateien sucht? Warum startet winword.exe auch dann, wenn das Verzeichnis, in dem es sich befindet, nicht Teil von PATH ist, aber dasselbe gilt für audacity.exe nicht?

Ich habe auch andere Anwendungen ausprobiert. Chrome und Firefox funktionieren, wenn ich den Startbefehl verwende.

UPDATE: Ich verwende Windows Version 6.3.9600 (Windows 8.1)

33
Der Kern von in [meiner Antwort auf die Frage von Kyle Delaney vor etwa eineinhalb Jahren] (https://superuser.com/a/1196646/401839) befasst sich auch mit dieser Frage. TOOGAM vor 6 Jahren 1

5 Antworten auf die Frage

43
Ramhound

Zuerst dachte ich, dass cmd nur nach ausführbaren Dateien in den in der PATH-Variablen enthaltenen Verzeichnissen sucht. Daher habe ich zufällig eine Anwendung - winword.exe (Microsoft Word) - ausgewählt und versucht, sie über die Befehlszeile zu starten:

Der Grund dafür winword.exewar, dass ein Registrierungsschlüssel vorhanden ist, der den Pfad zu Microsoft Word (Winword.exe) definiert. Ein ähnlicher Schlüssel existiert für Firefox.exe und Chrome.exe, wenn diese Anwendungen installiert sind.

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

Was möchte ich wissen, wo genau die Eingabeaufforderung nach ausführbaren Dateien sucht?

System PATH Variable, User PATH Variable und die verschiedenen Schlüssel darin ..\App Paths. Ich konnte bestätigen, dass Audacity bei der Installation keinen Schlüssel für sich selbst erstellt.

Wenn die ShellExecuteEx-Funktion mit dem Namen einer ausführbaren Datei in ihrem LpFile-Parameter aufgerufen wird, gibt es mehrere Stellen, an denen die Funktion nach der Datei sucht. Wir empfehlen, Ihre Anwendung im Registrierungsunterschlüssel App Paths zu registrieren. Dadurch wird vermieden, dass Anwendungen die Umgebungsvariable PATH des Systems ändern müssen.

  • Das aktuelle Arbeitsverzeichnis.
  • Nur das Windows-Verzeichnis (es werden keine Unterverzeichnisse durchsucht).
  • Das Windows \ System32-Verzeichnis.
  • Verzeichnisse, die in der Umgebungsvariable PATH aufgeführt sind.
  • Empfohlen: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths

Quelle: Bewerbungsregistrierung

15
Larryc

Wenn Sie an der Eingabeaufforderung nur eingeben WinWord, wird die Ausführung fehlgeschlagen.

Wenn Sie eingeben, wird START WinWordes ausgeführt.

Der StartBefehl ist hier der Schlüssel.

Wenn Sie versuchen, eine Datei über den Startbefehl auszuführen, führt die Eingabeaufforderung keine Suche durch. Stattdessen übergibt es den Dateinamen (und die Argumente) an Windows selbst (über den ShellExecuteEx-API-Aufruf), der dann nach dem Speicherort der Datei suchen muss. Es gibt mehrere Orte in der folgenden Reihenfolge:

  • Das aktuelle Arbeitsverzeichnis.

  • WindowsNur das Verzeichnis (es werden keine Unterverzeichnisse durchsucht).

  • Das Windows\System32Verzeichnis

  • Verzeichnisse, die in der PATHUmgebungsvariablen aufgeführt sind.

  • Empfohlen:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

WinWordist in diesem Registrierungsschlüssel. Der Schlüssel ist da, um PATHnicht zu lang zu werden.

Bitte zitieren und zitieren Sie alle Quellen. Wenn Sie die Suchreihenfolge nicht aus dem Speicher geschrieben haben, sollten Sie Ihre Quelle angegeben haben, aus der die Liste und die Reihenfolge hervorgehen, in der sie durchsucht wurde. Ramhound vor 6 Jahren 7
Die Quelle wären meine Notizen von etwas, an dem ich vor ein paar Jahren gearbeitet habe. Ich weiß nicht, wo ich es damals gefunden habe, Webseiten kommen und gehen. Larryc vor 6 Jahren 0
Sie erhalten sie aus derselben [Dokumentation] (https://docs.microsoft.com/de-de/windows/desktop/shell/app-registration), von der alle anderen sie erhalten haben. Ramhound vor 6 Jahren 5
6
Akina

Das Programm (wenn Sie seinen Modulnamen ohne Laufwerk / Pfad in der Eingabeaufforderung angeben) in Windows-Befehlsprozessor (CMD.EXE) kann gestartet werden, wenn es gefunden wird:

  • durch PATH-Umgebungsvariable (sowohl ausführbare Datei als auch deren Hardlink / Softlink / Verknüpfung mit demselben Namen)

  • von DOSKEY Alias

  • nach Anwendungspfad von HKLM\Software\Microsoft\Windows\CurrentVersion\App Pathsoder HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths(bei Verwendung des startBefehls)

Mit diesem Wissen (vor allem dem letzten) können Sie eigene Aliase erstellen, die für Sie bequem sind. Sie können beispielsweise die Anwendung HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exemit dem Standardwert erstellen C:\Program Files (x86)\Audacity\Audacity.exeund diese Anwendung starten, indem Sie einfach die start auEingabeaufforderung eingeben .

0
Aaron

Während die anderen Antworten wahrscheinlich der spezifische Grund in Ihrem Fall sind, gibt es auch eine andere Antwort auf Ihre Frage, die bei anderen Anwendungen der Fall gewesen sein könnte: an derselben Stelle, an der Sie gesucht haben, jedoch mit anderen Dateierweiterungen.

Sie haben ausdrücklich gesagt, dass Sie nach Dateien mit der Erweiterung suchen exe. Windows versucht auch, Dateien mit anderen Erweiterungen auszuführen.

Eine weitere Umgebungsvariable, die beim Ausführen eines Befehls zum Einsatz kommt, ist die Variable PATHEXT. Dies ist eine ;-delimited Liste von Dateierweiterungen, die ausgeführt werden sollen. Wenn Sie ein Echo haben, sehen PATHEXTSie vielleicht etwas .COM;.EXE;.BAT;.CMD;.VBS;(...). Einige Anwendungen verwenden diese anderen Dateitypen als Einstiegspunkt für Endbenutzer. Es ist viel seltener, aber es passiert. Ich habe mehrere große kommerzielle Produkte verwendet, die von .BATSkripten ausgehen. Um eines davon als Beispiel zu verwenden, kann ich es mit dem Befehl starten standalone, obwohl es kein standalone.exe... gibt. Stattdessen hat es ein standalone.bat.

Einige der Erweiterungen, die PATHEXTich im Moment habe, habe ich noch nie benutzt. Diejenigen, die ich habe mehr in viel häufig laufen (aber offensichtlich nicht so viel wie exe) sind: .com, .bat, .vbs, .js, .jar. Bei den ersten beiden handelt es sich um Windows-Batch-Skriptdateien, und bei den anderen drei handelt es sich um Dateitypen für bestimmte Programmiersprachen, die von Skripts oder virtuellen Maschinen statt von exes ausgeführt werden (jeweils Visual Basic, Javascript und Java).

Down-Voter interessiert sich für einen Kommentar (ich weiß, dass es normalerweise sinnlos ist zu fragen, aber manchmal bekomme ich eine Antwort)? Habe ich irgendwo einen Fehler gemacht? Aaron vor 6 Jahren 0
Nicht ich, aber auf eine wilde Vermutung ist es so, weil, während 'PATHEXT' und 'PATH' beide mit dem Laufen von Dingen zusammenhängen, sie etwas orthogonal in ihren jeweiligen Aufgaben sind. "PATH" gibt ** an, wo ** nach Dingen gesucht werden soll, und das war, was das OP gefragt hat, während "PATHEXT" ** angibt, was ** ausgeführt werden kann. dgnuff vor 6 Jahren 0
@dgnuff Interessant, da dies mein Punkt war: OP formulierte die Frage in einer Art und Weise, die um eine Frame-Herausforderung bat ... In SE-Worten stellten sie eine "XY-Frage", indem sie davon ausging, dass die Datei nicht ausgeführt wurde an den Orten, die bereits auf dem Weg gesucht wurden. Trotzdem danke. Aaron vor 6 Jahren 0
0
Eric Towers

start winwordteilt der Eingabeaufforderung nicht mit, dass sie gestartet werden soll winword. Sie teilt der Eingabeaufforderung startmit, das Argument zu starten winword. Startverwendet seine eigenen Methoden um zu finden winword.

Nur winwordsagt die Eingabeaufforderung zu starten winword. Und wenn Sie es versuchen, da winwordes nicht auf dem ist PATH, startet es nicht.