Woher weiß das Dialogfeld "Ausführen", wo sich Anwendungen befinden?

72

Als Hauptbenutzer verwende ich häufig das Dialogfeld "Ausführen".

Ich kann verstehen, warum die folgenden Befehle funktionieren, wie sie in der PATHUmgebungsvariablen sind.

mspaint
diskmgmt.msc
explorer

Diese Befehle funktionieren auch in CMD.

Die folgenden Befehle funktionieren in run, aber PATHnicht in CMD.

firefox
winword
iexplore

Woher weiß Run, wo sich diese Dateien befinden?

mt025
quelle

Antworten:

90

Wenn Sie einen Befehl im Dialogfeld "Ausführen" ausführen, wird der App PathsRegistrierungsschlüssel hier angezeigt:

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

und

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

BEISPIEL

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\filezilla.exe

(default) value data enthält den vollständigen Pfad zur ausführbaren Datei.

Wenn es nicht gefunden wird, wird jeder im PATH enthaltene Ordner durchsucht.

Die Eingabeaufforderung verweist jedoch nicht auf diese Registrierungsschlüssel. Es wird nur der Pfad durchsucht.

w32sh
quelle
5
Ah, das erklärt wahrscheinlich, warum nicht mehrere Programme mit dem gleichen Namen wie open with options funktionieren können. Schlechtes Design.
curiousdannii
2
Ja fast. Aber Öffnen mit Dialog liest aus HKCR\ApplicationsundRegisteredApplications
w32sh
4
Microsoft hat dazu ein Video bereitgestellt: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths
magicandre1981
6
Sie können natürlich das starteingebaute Programm verwenden, das die App-Pfade durchsucht.
Neil
1
Dies ist hier ziemlich gut dokumentiert . Ich habe auch erklärt , wie cmd hat seine Suche hier - es ist ein bisschen von einem speziellen Fall unterscheidet sich von Win32 - APIs.
Bob
4

Die Antwort von w32sh weist richtig darauf hin, dass die zusätzlichen Schlüssel, die im Dialogfeld "Ausführen" gesucht wurden, hier sind:

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

Für diese Pfade gibt es eine offizielle Dokumentation .

Eine wichtige Tatsache bei diesen Schlüsseln ist, dass der Name des Schlüssels (z. B. "filezilla.exe") in keiner Weise mit dem vollständigen Pfad übereinstimmen muss. Unter Windows 7 kann der Wert sogar eine einfache Befehlszeile sein, ähnlich dem, was als "Ziel" einer Verknüpfung verwendet werden kann.

Zum Beispiel hatte ich das in meiner Registry:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="\"C:\\WINDOWS\\system32\\javaw.exe\" -Xms24M -Xmx512M -jar \"C:\\Program Files\\jEdit\\jedit.jar\" -reuseview"

In Windows 10 scheint dies nicht zu funktionieren, Sie können jedoch auf eine beliebige Datei verweisen, einschließlich einer Batchdatei, z

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="C:\\Program Files\\jEdit\\run-jedit.bat"

Dies ermöglicht es Ihnen, "jedit" oder "jedit C: \ foo \ bar \ something.txt" einzugeben, um die JVM mit den entsprechenden Optionen auszuführen und jEdit zu starten / erneut zu verwenden .

Soweit ich sehen kann, muss der Schlüsselname auf ".exe" enden. Um also einen Alias ​​von "abc" zu erstellen, erstellen Sie einen Schlüssel "abc.exe", auch wenn dieser nicht auf eine ".exe" -Datei verweist .

IMSoP
quelle
Es funktioniert hier nicht, wenn ich zusätzliche Schalter nach dem Namen der ausführbaren Datei verwende.
w32sh
@ w32sh Hm, ich denke, es hat sich in Win 10 geändert :(
IMSoP
-1

In der Befehlszeile befindet sich eine Umgebungsvariable namens PATH oder% PATH%. Es enthält eine Reihe von Orten, die durchsucht werden müssen.

Garhoogin
quelle