windows matlab batch-file cmd

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.

  1. Directorio de trabajo actual.

  2. Todos los directorios de la variable de entorno PATH en orden como se enumeran en PATH .

    Simplemente escriba una set path de set path ventana del símbolo del set 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í.

  3. 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 Paths

    Las 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 devuelve C:/Windows/System32/cmd.exe
  • C:/CheckPath.bat NotValid.exe devuelve Could 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.