windows - ¿Dónde está "START" buscando ejecutables?
matlab batch-file (2)
El comando start encuentra archivos ejecutables que se ejecutan como el intérprete de línea de comandos cmd.exe lo hace si no se utiliza una ruta absoluta, utilizando además las extensiones enumeradas en la variable de entorno PATHEXT separadas por punto y coma si también falta la extensión del archivo.
-
Directorio de trabajo actual.
-
Todos los directorios de la variable de entorno PATH en orden como se enumeran en PATH .
Simplemente escriba una
set path
deset path
ventana del símbolo delset path
para ver todos los directorios en PATH , así como todas las extensiones de archivo en PATHEXT .Tenga en cuenta que cada cuenta de usuario tiene su propia RUTA . Por lo tanto, la RUTA de la cuenta del sistema suele ser diferente a la RUTA de una cuenta de usuario estándar. Eso es muy importante al ejecutar un archivo por lotes con runas comando o mediante el programador de tareas con una cuenta diferente.
El archivo por lotes publicado por Jason Faulkner también es muy útil aquí.
-
Inicio se ve más allá en el registro bajo las teclas
HKEY_CURRENT_USER / Software / Microsoft / Windows / CurrentVersion / Rutas de aplicación
HKEY_CURRENT_USER / Software / Wow6432Node / Microsoft / Windows / CurrentVersion / App Paths
HKEY_LOCAL_MACHINE / Software / Microsoft / Windows / CurrentVersion / Rutas de aplicación
HKEY_LOCAL_MACHINE / Software / Wow6432Node / Microsoft / Windows / CurrentVersion / App PathsLas aplicaciones instaladas con un paquete MSI (incrustado en el instalador EXE o publicado por separado) que usan msiexec tienen su nombre de archivo registrado en Rutas de aplicación con el valor de cadena predeterminado que contiene el nombre del ejecutable con la ruta completa. A menudo hay un segundo valor de cadena con el nombre Ruta que contiene solo la ruta completa al ejecutable de la aplicación. Otros instaladores registran una aplicación también en
App Paths
, consulte el artículo de Microsoft sobre el registro de aplicaciones .
La clave de
rutas de aplicaciones
en la
sección de registro
HKEY_CURRENT_USER
generalmente no existe, ya que la instalación se realiza utilizando un instalador de confianza o una cuenta de administrador local y, por lo tanto, el registro de la aplicación instalada se realiza en la sección de registro
HKEY_LOCAL_MACHINE
.
Pero en una instalación por usuario de una aplicación, la ruta
HKCU
se usa para el registro de la aplicación en lugar de la ruta
HKLM
.
La clave de rutas de aplicaciones en la clave Wow6432Node solo existe en Windows x64. Sin embargo, las aplicaciones x86 se registran, sin embargo, generalmente en ambas rutas de aplicaciones, aunque Wow6432Node es para aplicaciones de 32 bits y el otro árbol para aplicaciones de 64 bits en Windows 7 x64, Windows Server 2008 R2 x64 y posterior Windows x64. Para obtener detalles, consulte el artículo de Microsoft Claves de registro afectadas por WOW64 .
Una nota más:
Incluso con
.exe
especificado,
comience las
búsquedas en el directorio de trabajo actual, así como en los directorios de
PATH
después de no encontrar
AppName.exe
adicionalmente para
AppName.exe.*
Y compruebe la extensión del archivo (cadena después del último período) contra las extensiones de archivo en
PATHEXT
si esto devuelve uno o más nombres de archivo.
Sin embargo, siempre es mejor especificar la extensión de archivo de la aplicación para comenzar, ya que la búsqueda de
AppName.exe
siempre se realiza primero antes de ejecutar la búsqueda con comodines si no se puede encontrar
AppName.exe
en el directorio actual.
La herramienta gratuita Process Monitor of Sysinternals (Microsoft) es una gran herramienta para descubrir cosas así.
Por último, pero no menos importante, para ninguno de los ejecutables, las comprobaciones de inicio también HKEY_CLASSES_ROOT para una asociación de archivos para abrir un archivo o un URI (URL) con la aplicación asociada definida para el comando de apertura . Esa es la razón por la cual algo como a continuación también funciona.
start MyTextFile.txt
start https://stackoverflow.com/
%SystemRoot%/System32/cmd.exe
contiene el código de
start
utiliza la función de shell de Windows
ShellExecuteEx
para ejecutar aplicaciones o abrir archivos o URL con la aplicación asociada.
En mi empresa utilizamos un archivo por lotes para iniciar Matlab. El archivo por lotes prepara el entorno antes de iniciar Matlab.
Matlab se inicia con
START MATLAB.EXE
Tengo varias versiones de Matlab instaladas en mi sistema. Y este comando está iniciando la versión incorrecta de Matlab. ¿Dónde está START buscando los ejecutables?
Puede usar este archivo por lotes para detectar dónde el sistema resuelve el EXE en cuestión:
@ECHO OFF
REM Save this as C:/CheckPath.bat
IF NOT "%~$PATH:1" == "" (
ECHO %~$PATH:1
) ELSE (
ECHO Could not find "%~1" inside of a registered PATH.
)
Ahora corriendo:
-
C:/CheckPath.bat cmd.exe
devuelveC:/Windows/System32/cmd.exe
-
C:/CheckPath.bat NotValid.exe
devuelveCould not find "NotValid.exe" inside of a registered PATH.
Intente ejecutar
CheckPath.bat MATLAB.exe
y podrá ver hacia dónde está resolviendo el sistema la ruta.
Nota: esto resolverá el directorio asumiendo que no está redefiniendo
%PATH%
en su secuencia de comandos.