publickey permission comando java permissions

permission - Permiso denegado error en Java para comando chmod



comando scp permission denied (5)

Actualmente estoy trabajando en un proyecto que también hace uso de FFMpeg en OSX. Guardo FFMpeg en el JAR y lo extraigo y configuro el ejecutable en uso como parece que está haciendo. Esto es lo que hago, y parece funcionar.

public static void setExecutable(File file, boolean executable) { Process p = Runtime.getRuntime().exec(new String[] { "chmod", "u"+(executable?''+'':''-'')+"x", file.getAbsolutePath(), }); // do stuff to make sure p finishes & capture output }

El código es GPL, así que siéntase libre de verificarlo. No es la mejor base de código, e incluso el material de FFMpeg es quizás demasiado complejo, pero funciona.

La fuente se puede ver en http://korsakow.net

Estos dos archivos en particular pueden ser interesantes para ti

FFMpegEncoderOSX.java

FileUtil.java

Tengo un archivo ejecutable (ffmpeg) que intento ejecutar con un programa Java en una Mac. Usé el programa Java para enviar el comando chmod 777 /path/to/ffmpeg , pero cuando intento ejecutar ffmpeg, aparece el siguiente error:

java.io.IOException: Cannot run program "/Users/james/WalkTheHall/ffmpeg": error=13, Permission denied

Pero cuando ejecuto chmod 777 /path/to/ffmpeg desde Terminal antes de abrir la aplicación Java, el comando ffmpeg se ejecutará perfectamente en el programa Java.

¿Hay alguna diferencia entre llamar a chmod desde dentro del programa Java y llamarlo por mi cuenta? ¿Por qué no va a funcionar? ¡Gracias!


Sí, hay una diferencia. Cuando ejecuta el comando desde la terminal, es usted quien realiza la acción y, por lo tanto, se realiza utilizando sus credenciales. La aplicación Java ejecuta el comando usando los permisos de la aplicación Java. Esto es para evitar que una aplicación se ejecute y luego realice cambios peligrosos y no deseados en el sistema de archivos. Quizás alguien más pueda elaborar y guiar una solución alternativa para esto.


Solo tuve el mismo problema en mi código. Lo resolví agregando waitFor after exec. El proceso "chmod" no termina cuando se ejecuta el siguiente comando. el código puede verse así:

p = Runtime.getRuntime.exec("chmod 777 xxx"); p.waitFor(); Runtime.getRuntime.exec("./xxx");


Prueba esto:

commandFile.setExecutable(true); Process p = Runtime.getRuntime.exec(commandFile.getAbsoluteFile());