¿El símbolo del sistema de Windows busca en algún lugar que no sean las ubicaciones especificadas por la variable PATH al iniciar los programas de aplicación?


35

Intenté el siguiente experimento.

Antes de comenzar, verifiqué la variable PATH de cmd, que tiene el siguiente valor:

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

Al principio, pensé que cmd solo busca ejecutables en los directorios contenidos en la variable PATH, así que elegí al azar una aplicación: winword.exe (Microsoft Word) e intenté iniciarla desde la línea de comandos:

start winword

Pero para mi sorpresa, ¡se lanza el programa! La razón por la que me sorprende es porque he buscado en todos los directorios de la variable PATH el archivo exe llamado 'winword', ¡pero todas mis búsquedas quedaron vacías!

Por lo tanto, he concluido que el símbolo del sistema debe haber sabido buscar en lugares distintos de los especificados en la variable PATH para buscar ejecutables.

Obviamente, lo siguiente que hice fue buscar la ubicación precisa donde se encuentra el archivo ejecutable 'winword'. Resulta que winword.exe se encuentra aquí:

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

Por lo tanto, ¿me da la idea de que quizás CMD mira automáticamente a través de ProgramFiles y ProgramFiles (x86) (y todos sus subdirectorios) al ejecutar el comando 'start'? Lo que me llevó a intentar iniciar otra aplicación instalada en mi computadora, Audacity, con el archivo exe ubicado en:

C:\Program Files (x86)\Audacity

Nuevamente, para mi sorpresa, Audacity no se pudo iniciar cuando escribí:

start audacity

en la línea de comando.

ingrese la descripción de la imagen aquí

Luego agregué el directorio que contiene audacity.exe a PATH:

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

después de lo cual intenté lanzar audacity nuevamente:

start audacity

Bueno, como era de esperar, se lanzó Audacity.

Lo que quiero saber es dónde busca exactamente el símbolo del sistema los ejecutables. ¿Por qué se inicia winword.exe incluso cuando el directorio que lo contiene no forma parte de PATH, pero lo mismo no es cierto para audacity.exe?

También probé otras aplicaciones. Chrome y Firefox funcionan cuando uso el comando de inicio.

ACTUALIZACIÓN: estoy ejecutando Windows versión 6.3.9600 (Windows 8.1)


Respuestas:


44

Al principio, pensé que cmd solo busca ejecutables en los directorios contenidos en la variable PATH, así que elegí al azar una aplicación: winword.exe (Microsoft Word) e intenté iniciarla desde la línea de comandos:

La razón winword.exefuncionó es que existe una clave de registro que definió la ruta a Microsoft Word (Winword.exe). Existe una clave similar para Firefox.exe y Chrome.exe si esas aplicaciones están instaladas.

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

Lo que quiero saber es dónde busca exactamente el símbolo del sistema los ejecutables.

Variable de la RUTA del sistema, Variable de la RUTA del usuario y las diferentes claves que contiene ..\App Paths. Pude confirmar que Audacity no crea una clave para sí mismo cuando está instalado.

Cuando se llama a la función ShellExecuteEx con el nombre de un archivo ejecutable en su parámetro lpFile, hay varios lugares donde la función busca el archivo. Recomendamos registrar su aplicación en la subclave de registro de rutas de aplicaciones. Al hacerlo, se evita la necesidad de que las aplicaciones modifiquen la variable de entorno PATH del sistema.

  • El directorio de trabajo actual.
  • Solo el directorio de Windows (no se buscan subdirectorios).
  • El directorio Windows \ System32.
  • Directorios listados en la variable de entorno PATH.
  • Recomendado: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths

Fuente: Registro de solicitud


15

Desde el símbolo del sistema, si solo ingresa WinWord , no se ejecuta.

Si entras START WinWord se ejecuta.

los Start comando es la clave aquí.

Cuando intenta ejecutar un archivo mediante el comando de inicio, el símbolo del sistema no realiza ninguna búsqueda. En su lugar, pasa el nombre del archivo (y los argumentos) a Windows (a través de la llamada API ShellExecuteEx), que luego debe buscar la ubicación del archivo. Hay varios lugares en los que busca en el siguiente orden:

  • El directorio de trabajo actual.

  • El Windowsdirectorio (sin subdirectorios se buscan).

  • El Windows\System32directorio

  • Directorios listados en la PATHvariable de entorno.

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

WinWordestá en esa clave de registro. La clave está ahí para evitar PATHalargarse demasiado.


77
Por favor, cite y cite todas las fuentes. A menos que haya escrito el orden de búsqueda de memoria, debería haber citado su fuente, que indica la lista y el orden en el que se busca.
Ramhound

La fuente serían mis notas de algo en lo que estaba trabajando hace un par de años. No sé dónde lo recogí en ese momento, las páginas web van y vienen.
Larryc

55
Los obtuviste de la misma documentación que todos los demás.
Ramhound

7

El programa (cuando especifica su nombre de módulo sin unidad / ruta en el símbolo del sistema) en el procesador de comandos de Windows (CMD.EXE) se puede iniciar cuando se encuentra:

  • por la variable de entorno PATH (tanto ejecutable como su enlace rígido / enlace suave / acceso directo con el mismo nombre)

  • por alias DOSKEY

  • por ruta de aplicación desde HKLM\Software\Microsoft\Windows\CurrentVersion\App Pathso HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths(cuando se usa el startcomando)

Usando este conocimiento (especialmente el último) puede crear sus propios alias convenientes para usted. Por ejemplo, puede crear HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.execon el valor predeterminado C:\Program Files (x86)\Audacity\Audacity.exee iniciar esta aplicación simplemente escribiendo el start ausímbolo del sistema.


0

Si bien es probable que las otras respuestas sean la razón específica en su caso, también hay otra respuesta a su pregunta que podría haber sido el caso para otras aplicaciones: en el mismo lugar que estaba buscando, pero con diferentes extensiones de archivo.

Dijiste específicamente que estabas buscando archivos con extensión exe . Windows también intentará ejecutar archivos de otras extensiones.

Otra variable de entorno que entra en juego al ejecutar un comando es la variable PATHEXT. Esta es una ;lista delimitada de extensiones de archivo para intentar ejecutar. Si haces eco PATHEXT, podrías ver algo como .COM;.EXE;.BAT;.CMD;.VBS;... (etc.). Algunas aplicaciones usan estos otros tipos de archivos como su punto de entrada para el usuario final. Es mucho menos común, pero sucede. He usado varios productos comerciales importantes que comienzan con .BATscripts. Para usar uno de ellos como ejemplo, puedo comenzarlo con el comando standaloneaunque no haya standalone.exe... en su lugar, tiene unstandalone.bat .

Algunas de las extensiones que tengo en el PATHEXTque estoy viendo en este momento nunca he tenido uso de una aplicación. Los que me he topado con mucha más frecuencia (pero obviamente no tanto como exe) son: .com, .bat, .vbs, .js, .jar. Los dos primeros son archivos de script por lotes de Windows, y los otros tres son tipos de archivos para lenguajes de programación específicos que se ejecutan desde scripts o máquinas virtuales en lugar de desde exes (respectivamente: visual basic, javascript y java).


Atención de votantes negativos para comentar (sé que generalmente es inútil preguntar, pero a veces recibo una respuesta). ¿Cometí un error en alguna parte?
Loduwijk

Yo no, pero a una conjetura salvaje es porque mientras que PATHEXTy PATHson ambos relacionados con conseguir cosas funcionando, son algo ortogonal en sus respectivas tareas. PATHespecifica dónde buscar las cosas que se ejecutarán, y es lo que preguntaba el OP, mientras que PATHEXTespecifica qué se puede ejecutar.
dgnuff

@dgnuff Interesante, ya que ese era mi punto: OP redactó específicamente la pregunta de una manera que suplicaba un desafío de marco ... en términos SE, estaban haciendo una "pregunta XY" al suponer que el archivo que se estaba ejecutando no era en los lugares que ya se estaban buscando en el camino. Gracias de todos modos.
Loduwijk

0

start winwordno le dice al símbolo del sistema que se inicie winword. Le dice al símbolo del sistema que se inicie startcon argumento winword. Startusa sus propios métodos para encontrarwinword .

Solo winwordle dice al símbolo del sistema que se inicie winword. Y si lo intentas, ya winwordque no está en el PATH, no se inicia.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.