¿Cómo sabe el cuadro de diálogo Ejecutar dónde están las aplicaciones?

72

Como usuario avanzado, utilizo con frecuencia el cuadro de diálogo Ejecutar.

Puedo entender por qué funcionan los siguientes comandos, ya que están en la PATHvariable de entorno.

mspaint
diskmgmt.msc
explorer

Estos comandos también funcionan en CMD.

Los siguientes comandos funcionan en ejecución, pero no están en el PATH, y no funcionan en CMD.

firefox
winword
iexplore

¿Cómo sabe Run dónde están estos archivos?

mt025
fuente

Respuestas:

90

Cuando ejecuta un comando desde el cuadro de diálogo Ejecutar, el sistema mira la App Pathsclave de registro aquí:

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

y

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

EJEMPLO

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

(default) Los datos de valor tienen la ruta completa al ejecutable.

Si no se encuentra, examina cada carpeta incluida en la RUTA.

Mientras que el símbolo del sistema no hace referencia a estas claves de registro. Solo busca la RUTA.

w32sh
fuente
55
Ah, esto probablemente explica por qué no puede tener múltiples programas con el mismo nombre que funcionan con opciones abiertas. Mal diseño.
curiousdannii
2
Si casi. Pero Abrir con el diálogo lee desde HKCR\ApplicationsyRegisteredApplications
w32sh
44
Microsoft proporcionó un video sobre esto: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths
magicandre1981
66
Por supuesto, puede usar el startincorporado que busca las rutas de la aplicación.
Neil
1
Esto está bastante bien documentado aquí . También he explicado cómo cmd realiza su búsqueda aquí : es un caso especial distinto de las API de Win32.
Bob
4

La respuesta de w32sh señala correctamente que las teclas adicionales buscadas por el cuadro de diálogo Ejecutar están aquí:

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

Existe documentación oficial para estos caminos .

Un hecho importante acerca de estas claves es que el nombre de la clave (por ejemplo, "filezilla.exe") no tiene que coincidir con la ruta completa de ninguna manera. En Windows 7, el valor puede ser incluso una simple línea de comando, similar a lo que se puede usar como el "objetivo" de un acceso directo.

Por ejemplo, solía tener esto en mi registro:

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

Parece que no puedo hacer que esto funcione en Windows 10, pero aún puede apuntar a cualquier archivo, incluido un archivo por lotes, por ejemplo

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

Eso le permite escribir "jedit" o "jedit C: \ foo \ bar \ something.txt" para ejecutar la JVM con las opciones apropiadas y ejecutar / reutilizar jEdit .

Hasta donde puedo ver, el nombre de la clave debe terminar en ".exe", por lo que para crear un alias de "abc", debe crear una clave "abc.exe", incluso si no apunta a un archivo ".exe" .

IMSoP
fuente
No funciona aquí si uso modificadores adicionales después del nombre del archivo ejecutable.
w32sh
@ w32sh Hm, creo que ha cambiado en Win 10 :(
IMSoP
-1

Hay una variable de entorno llamada PATH, o% PATH% en la línea de comando. Contiene una serie de ubicaciones para buscar.

Garhoogin
fuente