2010-03-08 10 views
8

Probablemente este sea un script por lotes 101, pero no encuentro ninguna explicación/documentación clara sobre por qué sucede esto o si mi solución es realmente la solución. Básicamente, cualquier terminología o enlace a buenas fuentes es realmente apreciada.iniciando un ejecutable de Windows mediante script por lotes, exe no en Archivos de programa

Tengo un programa que quiero ejecutar a través de un script por lotes (junto con varios otros programas). Es el único en el que exe no está en una carpeta Program Files. Puedo conseguir que se inicie la siguiente manera:

C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe 

pero me da un error en la línea de:

Run-time Error '3024': 

Could not find file 
C:\Users\MyUserName\Desktop\ModuleSettings.mdb 

Así que parece que el programa está en busca de sus archivos de configuración desde la misma ubicación que el script por lotes se inicia. Teniendo en cuenta que finalmente conseguí que todo funcione de la siguiente manera:

cd C:\WeirdProgram\WeirdProgramModule\ 
weirdmodule.exe 

que funciona muy bien, y no es el fin del mundo a tener que seguir este camino (solo una línea adicional), pero me he convencido yo mismo que estoy haciendo algo mal basado en la falta de comprensión básica.

¿Alguien sabe o puede indicarme por qué funciona de esta manera?

Ah, y haciendo lo siguiente:

start "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe" 

no hace nada en absoluto.

Gracias,

Respuesta

16

lo está haciendo perfectamente :-)

el ejecutable está probablemente en busca de este archivo en el "trabajo actual directorio ", que se está configurando, cuando lo" cd "antes.

puede establecer su directorio de trabajo manualmente creando un acceso directo a su archivo por lotes; botón derecho del ratón; propiedades.

edición:

también puede establecer el directorio de trabajo actual usando el comando start:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe" 

edición:

Si te gusta pasar params, hay que añadirlas al nombre del archivo ejecutable como lo haría en un acceso directo habitual:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe" "param1 param2" 

o

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe param1 param2" 

Para referencia, se describe la sintaxis aquí: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true.

+0

Obtiene la bonificación de respuesta por mostrarme cómo ejecutar en una línea. Es lo mismo, por lo que ambos dicen, pero mis superiores querían algo apretado como un tambor. – Anthony

+0

¿cómo puedo pasar el argumento a weirdmodule? –

+0

Actualizaré mi respuesta. –

5

Lo que pasa es que weirdmodule.exe está buscando en el "directorio actual" para el archivo .mdb. Es posible que pueda decirle dónde encontrar el archivo .mdb a través de un parámetro de línea de comando o algún otro método de configuración (registro o archivo .ini tal vez). Sin embargo, cómo especificaría la ubicación depende por completo del programa weirdmodule.exe.

Aparte de eso, su solución actual es probablemente lo que está atrapado.

En cuanto a su problema con el uso de start.exe ... el programa start.exe tiene el comportamiento muy, muy extraño (comportamiento extraño en mi opinión) de tratar el primer parámetro como el 'título' para poner en la ventana si (y solo si) el primer parámetro está entre comillas. Entonces tiene un par de opciones:

  • No utilice comillas para especificar el programa. Esto funciona para usted, ya que no es necesario comillas (no hay espacios ni otros caracteres especiales en el camino que requerirían citándolo):

    start C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe 
    
  • dar una vacía (o alguna otra cadena) Título como el primer parámetro.Esto es algo que tendría que hacer si su ruta requiere cotizaciones:

    start "" "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe" 
    
+0

El archivo 'mdb' está justo al lado del archivo' exe'. Pensaría que se vería en el mismo camino desde el que se llamó antes de mirar en el camino que lo llamó (si eso tiene sentido). – Anthony

+0

El directorio actual probablemente será la ubicación del archivo por lotes que está ejecutando. Es por eso que su solución funciona (el directorio actual ha cambiado al exe). – Russell

+0

@Anthony: tienes razón en que buscar en el directorio de la aplicación a menudo tiene sentido. Es una técnica común, aunque creo que generalmente el directorio actual se busca primero, luego el directorio de la aplicación. Eso les da a los usuarios un poco más de flexibilidad si quieren tener múltiples conjuntos de datos. Desafortunadamente, estás a merced de quien haya codificado el programa para darle la flexibilidad que debería tener. –

Cuestiones relacionadas