it-swarm.com.de

Sucht die Windows-Eingabeaufforderung an einer anderen Stelle als der in der Variablen PATH angegebenen, wenn Anwendungsprogramme gestartet werden?

Ich habe das folgende Experiment versucht.

Bevor ich anfange, habe ich die PATH-Variable von cmd überprü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 Verzeichnissen sucht, die in der PATH-Variablen enthalten sind, also habe ich zufällig eine Anwendung ausgewählt - winword.exe (Microsoft Word) und versucht, sie über die Befehlszeile zu starten:

start winword

Aber zu meiner Überraschung startet das Programm! Der Grund, warum ich überrascht bin, ist, dass ich alle Verzeichnisse in der PATH-Variablen nach der exe-Datei namens 'winword' durchsucht habe, aber alle meine Suchanfragen waren leer!

Ich bin daher zu dem Schluss gekommen, dass die Eingabeaufforderung andere als die in der PATH-Variablen angegebenen Stellen durchsuchen muss, um nach ausführbaren Dateien zu suchen.

Als nächstes habe ich natürlich nach dem genauen Speicherort gesucht, 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

Daraus ergibt sich die Idee, dass CMD beim Ausführen des Befehls 'start' möglicherweise automatisch ProgramFiles und ProgramFiles (x86) (und alle ihre Unterverzeichnisse) durchsucht? Aus diesem Grund habe ich versucht, eine andere auf meinem Computer installierte Anwendung, Audacity, mit der exe-Datei zu starten, die sich unter folgender Adresse befindet:

C:\Program Files (x86)\Audacity

Zu meiner Überraschung konnte Audacity erneut nicht gestartet werden, als ich Folgendes eingab:

start audacity

an der Befehlszeile.

 enter image description here

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

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

danach habe ich versucht, Audacity erneut zu starten:

start audacity

Nun, nicht überraschend, startete Audacity.

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

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)

34
Anthony

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

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

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

Ich möchte wissen, wo genau die Eingabeaufforderung nach ausführbaren Dateien sucht.

System-PATH-Variable, Benutzer-PATH-Variable und die verschiedenen Schlüssel in ..\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 im Parameter lpFile aufgerufen wird, sucht die Funktion an mehreren Stellen nach der Datei. Es wird empfohlen, Ihre Anwendung im Registrierungsunterschlüssel App Paths zu registrieren. Auf diese Weise müssen Anwendungen die Umgebungsvariable PATH des Systems nicht ändern.

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

Quelle: Registrierung der Anwendung

44
Ramhound

Wenn Sie an der Eingabeaufforderung nur WinWord eingeben, wird das Programm nicht ausgeführt.

Wenn Sie START WinWord eingeben, wird es ausgeführt.

Der Befehl Start ist hier der Schlüssel.

Wenn Sie versuchen, eine Datei über den Befehl start 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), das dann nach dem Speicherort der Datei suchen muss. Es gibt mehrere Orte, die in der folgenden Reihenfolge durchsucht werden:

  • Das aktuelle Arbeitsverzeichnis.

  • Nur das Verzeichnis Windows (es werden keine Unterverzeichnisse durchsucht).

  • Das Verzeichnis Windows\System32.

  • Verzeichnisse, die in der Umgebungsvariablen PATH aufgeführt sind.

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

WinWord befindet sich in diesem Registrierungsschlüssel. Der Schlüssel ist da, um zu verhindern, dass PATH zu lang wird.

15
Larryc

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

  • nach PATH-Umgebungsvariable (sowohl die ausführbare Datei als auch der gleichnamige Hardlink/Softlink/Shortcut)

  • von DOSKEY alias

  • nach Anwendungspfad von HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths oder HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths (bei Verwendung des Befehls start)

Mit diesem Wissen (insbesondere dem letzten) können Sie Ihre eigenen, für Sie passenden Aliase erstellen. Zum Beispiel können Sie HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe mit dem Standardwert C:\Program Files (x86)\Audacity\Audacity.exe erstellen und diese Anwendung starten, indem Sie einfach start au in den Befehl Prompt eingeben.

6
Akina

start winword weist den Befehl Aufforderung zum Starten von winword nicht an. Es teilt dem Befehl Prompt mit, start mit dem Argument winword zu starten. Start verwendet seine eigenen Methoden, um winword zu finden.

Nur winword weist den Befehl Prompt an, winword zu starten. Und wenn Sie das versuchen, wird winword nicht gestartet, da PATH nicht vorhanden ist.

0
Eric Towers

Während die anderen Antworten wahrscheinlich der spezifische Grund für Ihren Fall sind, gibt es auch eine andere Antwort auf Ihre Frage, die für einige andere Anwendungen der Fall sein könnte: an derselben Stelle, an der Sie gesucht haben, aber mit unterschiedlichen Dateierweiterungen.

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

Eine weitere Umgebungsvariable, die beim Ausführen eines Befehls ins Spiel kommt, ist die Variable PATHEXT. Dies ist eine durch ; getrennte Liste von Dateierweiterungen, die ausgeführt werden sollen. Wenn Sie PATHEXT ausgeben, wird möglicherweise etwas wie .COM;.EXE;.BAT;.CMD;.VBS;... (usw.) angezeigt. Einige Anwendungen verwenden diese anderen Dateitypen als Einstiegspunkt für Endbenutzer. Es ist viel seltener, aber es passiert. Ich habe mehrere kommerzielle Hauptprodukte verwendet, die mit .BAT-Skripten beginnen. Um eines davon als Beispiel zu verwenden, kann ich es mit dem Befehl standalone starten, obwohl es keinen standalone.exe gibt. Stattdessen hat es einen standalone.bat.

Einige der Erweiterungen, die ich für die PATHEXT habe, die ich gerade betrachte, habe ich noch nie in einer Anwendung verwendet. Diejenigen, die ich habe viel häufiger erlebt (aber offensichtlich nicht so häufig wie exe), sind: .com, .bat, .vbs, .js, .jar. Die ersten beiden sind Windows-Batch-Skriptdateien, und die anderen drei sind Dateitypen für bestimmte Programmiersprachen, die von Skripten oder virtuellen Maschinen anstelle von exes (Visual Basic, Javascript und Java) ausgeführt werden.

0
Aaron