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.
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:
La razón
winword.exe
funcionó 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
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.Fuente: Registro de solicitud
fuente
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
Windows
directorio (sin subdirectorios se buscan).El
Windows\System32
directorioDirectorios listados en la
PATH
variable de entorno.Recomendado:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
WinWord
está en esa clave de registro. La clave está ahí para evitarPATH
alargarse demasiado.fuente
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 Paths
oHKCU\Software\Microsoft\Windows\CurrentVersion\App Paths
(cuando se usa elstart
comando)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.exe
con el valor predeterminadoC:\Program Files (x86)\Audacity\Audacity.exe
e iniciar esta aplicación simplemente escribiendo elstart au
símbolo del sistema.fuente
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 ecoPATHEXT
, 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.BAT
scripts. Para usar uno de ellos como ejemplo, puedo comenzarlo con el comandostandalone
aunque no hayastandalone.exe
... en su lugar, tiene unstandalone.bat
.Algunas de las extensiones que tengo en el
PATHEXT
que 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 comoexe
) 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 desdeexe
s (respectivamente: visual basic, javascript y java).fuente
PATHEXT
yPATH
son ambos relacionados con conseguir cosas funcionando, son algo ortogonal en sus respectivas tareas.PATH
especifica dónde buscar las cosas que se ejecutarán, y es lo que preguntaba el OP, mientras quePATHEXT
especifica qué se puede ejecutar.start winword
no le dice al símbolo del sistema que se iniciewinword
. Le dice al símbolo del sistema que se iniciestart
con argumentowinword
.Start
usa sus propios métodos para encontrarwinword
.Solo
winword
le dice al símbolo del sistema que se iniciewinword
. Y si lo intentas, yawinword
que no está en elPATH
, no se inicia.fuente