No se puede ejecutar un archivo cmd en Java

tengo que ejecutar un xyz.cmd archivo que está en un directorio E:/abc. Entonces la ruta absoluta del archivo a ejecutar es E:/abc/xyz.cmd. Cuando se ejecuta, el propio archivo crea una nueva ventana.

Mi fragmento de código es: -

String path = “E:\\abc”;
String cmd = path + “\\xyz.cmd”;
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
processBuilder.redirectErrorStream(true);
processBuilder.directory(new File(path));
processBuilder.start();

Esto no funciona, pero no da error ni excepción. Pero el archivo cmd funciona bien, se puede ejecutar manualmente desde su directorio usando explorer o cmd-prompt. Intenté usar diferentes versiones de jdk, pero fue en vano. Estoy usando el sistema operativo Windows 7. Tampoco veo el proceso ejecutándose en el Administrador de tareas. ¿Alguna idea de lo que va mal? El mismo código funciona bien en una computadora diferente con la misma configuración.

===EDIT==== ¿Puede ser esto un problema de seguridad? ¿Algo así como que el usuario que ejecuta el programa no tiene suficientes privilegios para ejecutar un archivo?

preguntado el 12 de junio de 12 a las 15:06

¿Dónde llamas realmente a cmd.exe? Si no llama a cmd.exe, ¿cómo sabrá el sistema operativo qué hacer con su xyz.cmd? -

Hovercraft Full of Eels es correcto: los archivos cmd no son ejecutables por sí solos, en realidad requieren que se pasen como argumento a cmd.exe para que se ejecuten. -

No lo necesito, porque el archivo xyz.cmd se encargará de eso. Estoy seguro, porque lo he visto correr. -

@gkris: entonces te equivocas. Los archivos cmd no se ejecutarán por sí solos y requieren que llame explícitamente a cmd.exe. Una simple búsqueda en Google te mostraría esto. Lo ha visto ejecutándose en el sistema operativo, no en Java, una gran diferencia. -

@gkris: nuevamente, está confundido porque no ve lo que hace el Explorador de Windows detrás de escena: está llamando a cmd.exe por usted. Confíe en mí, confíe en todos nosotros: debe llamar a cmd.exe. -

1 Respuestas

Necesitas llamar cmd.exe como primera parte de la Cadena del generador de procesos para que el procesador de comandos pueda llamar al archivo .cmd. Esto también se aplica a los archivos .bat o cualquier comando de tipo de sistema operativo. Por ejemplo, por favor mire aquí.

Además, por favor mira aquí: Cuando Runtime.exec () no

Editar
Usted declara:

comprenda que este no es el problema de no agregar cmd.exe en el generador de procesos; Debido a los comandos anteriores, se cuidará cmd.exe.

No veo documentación en sus publicaciones hasta ahora que esto sea cierto, y toda mi experiencia sugiere fuertemente lo contrario.

También declaras:

¿Puede ser esto un problema de seguridad? ¿Algo así como que el usuario que ejecuta el programa no tiene suficientes privilegios para ejecutar un archivo?

No hay forma de saberlo a menos que capture y muestre el flujo de entrada del proceso. De hecho, si no captura este flujo, podría evitar que su proceso funcione. A menudo, también tenemos que capturar el flujo de errores, pero los ha combinado con

processBuilder.redirectErrorStream(true)

Lea mi enlace "Cuando Runtime.exec() no" arriba para obtener más información sobre la necesidad de capturar transmisiones.

contestado el 23 de mayo de 17 a las 12:05

+1, especialmente por el último enlace al artículo de Java World. Mi opinión es que no debería preguntarse por qué un Process falla hasta que haya implementado todos las las recomendaciones. - Andrew Thompson

comprenda que este no es el problema de no agregar cmd.exe en el generador de procesos; Debido a los comandos anteriores, se cuidará cmd.exe. - gkris

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.