java.io.IOException: CreateProcess: c:/ error=5
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Win32Process.java:63)
at java.lang.Runtime.execInternal(Native Method)
Si recuerdo correctamente, el código de error 5 significa acceso denegado.Esto podría deberse a que su ruta de acceso es incorrecta (tratando de ejecutar "c: /") o está chocando con la seguridad de su sistema operativo (en cuyo caso, mire los permisos).
Si usted está teniendo problemas para localizar el ejecutable de Java, normalmente se puede encontrar utilizando las propiedades del sistema:
public class LaunchJre {
private static boolean isWindows() {
String os = System.getProperty("os.name");
if (os == null) {
throw new IllegalStateException("os.name");
}
os = os.toLowerCase();
return os.startsWith("windows");
}
public static File getJreExecutable() throws FileNotFoundException {
String jreDirectory = System.getProperty("java.home");
if (jreDirectory == null) {
throw new IllegalStateException("java.home");
}
File exe;
if (isWindows()) {
exe = new File(jreDirectory, "bin/java.exe");
} else {
exe = new File(jreDirectory, "bin/java");
}
if (!exe.isFile()) {
throw new FileNotFoundException(exe.toString());
}
return exe;
}
public static int launch(List<String> cmdarray) throws IOException,
InterruptedException {
byte[] buffer = new byte[1024];
ProcessBuilder processBuilder = new ProcessBuilder(cmdarray);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
InputStream in = process.getInputStream();
while (true) {
int r = in.read(buffer);
if (r <= 0) {
break;
}
System.out.write(buffer, 0, r);
}
return process.waitFor();
}
public static void main(String[] args) {
try {
Runtime.getRuntime().exec("c:/");
List<String> cmdarray = new ArrayList<String>();
cmdarray.add(getJreExecutable().toString());
cmdarray.add("-version");
int retValue = launch(cmdarray);
if (retValue != 0) {
System.err.println("Error code " + retValue);
}
System.out.println("OK");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
(Probado en Windows XP, Sun JRE 1.6; Ubuntu 8.04, OpenJDK JRE 1.6)
este es el equivalente a correr:
java -version
también puede que desee ver en el "java.library.path" propiedad del sistema (y "path.separator") cuando se trata de localizar el executabl mi.
¿Qué getMessage() en ese IOException volver? –
¿Desea ejecutarlo en una máquina virtual diferente? Siempre puede crear un nuevo hilo y dejar que el otro programa se ejecute. –
java.io.IOException: CreateProcess: c:/error = 5 en java.lang.Win32Process.create (Método nativo) en java.lang.Win32Process. (Win32Process.java:63) en java.lang.Runtime.execInternal (Método nativo) –
Arun