Question Comment le dialogue Exécuter sait-il où sont les applications?


En tant qu'utilisateur expérimenté, j'utilise fréquemment la boîte de dialogue Exécuter.

Je peux comprendre pourquoi les commandes suivantes fonctionnent, comme elles sont dans le PATH variable d'environnement.

mspaint
diskmgmt.msc
explorer

Ces commandes fonctionnent également dans CMD.

Les commandes ci-dessous fonctionnent en exécution, mais elles ne sont pas dans la PATH, et ils ne fonctionnent pas dans CMD.

firefox
winword
iexplore

Comment Run sait-il où sont ces fichiers?


69
2017-08-05 16:48


origine




Réponses:


Lorsque vous exécutez une commande à partir de la boîte de dialogue Exécuter, le système examine le App Paths clé de registre ici:

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

et

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

EXEMPLE

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

(default) Les données de valeur ont le chemin d'accès complet à l'exécutable.

S'il n'est pas trouvé, il examine chaque dossier inclus dans le PATH.

Considérant que l'invite de commande ne fait pas référence à ces clés de registre. Il ne recherche que le PATH.


89
2017-08-05 16:51



Ah, cela explique probablement pourquoi plusieurs programmes avec le même nom ne fonctionnent pas avec des options. Mauvaise conception. - curiousdannii
Oui presque. Mais Open avec dialogue lit à partir de HKCR\Applications et RegisteredApplications - Win32Guy
Microsoft a fourni une vidéo à ce sujet: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths - magicandre1981
Vous pouvez bien sûr utiliser le start Builtin qui recherche les chemins d'application. - Neil
C'est plutôt bien documenté ici. J'ai aussi expliqué comment cmd fait sa recherche ici - c'est un peu un cas particulier distinct des API Win32. - Bob


La réponse de w32sh indique correctement que les clés supplémentaires recherchées par la boîte de dialogue Exécuter sont ici:

  • HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ chemins d'accès \
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ chemins d'accès \

Il y a documentation officielle pour ces chemins.

Un fait important à propos de ces clés est que le nom de la clé (par exemple "filezilla.exe") ne doit pas nécessairement correspondre au chemin complet. Sous Windows 7, la valeur peut même être une simple ligne de commande, similaire à ce qui peut être utilisé comme "cible" d'un raccourci.

Par exemple, j'avais ceci dans mon registre:

[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"

Je ne peux pas sembler faire cela dans Windows 10, mais vous pouvez toujours indiquer n'importe quel fichier, y compris un fichier de commandes, par exemple

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

Cela vous permet de taper "jedit" ou "jedit C: \ foo \ bar \ something.txt" pour exécuter la JVM avec les options appropriées et lancer / réutiliser jEdit.

Pour autant que je sache, le nom de la clé doit se terminer par ".exe", donc pour créer un alias de "abc", vous créez une clé "abc.exe", même si elle ne pointe pas vers un fichier ".exe" .


4
2017-08-08 09:02



Cela ne fonctionne pas si j'utilise des commutateurs supplémentaires après le nom du fichier exécutable. - Win32Guy
@ w32sh Hm, je pense qu'il a changé dans Win 10 :( - IMSoP


Il existe une variable d'environnement appelée PATH ou% PATH% dans la ligne de commande. Il contient une série d'emplacements à rechercher.


-1
2018-01-06 00:45