Programa não executa corretamente ao gerar o .jar

Bom dia!

Tenho um programinha em java que tem como resource um arquivo .exe
Esse programa ao ser executado copia esse .exe para uma pasta no sistema e executa ele, quando termina a execução ele apaga este programa.
Dentro do Eclipse funciona perfeitamente, quando gerei o .jar ele até chega a copiar o programa para a pasta desejada mas não executa-o.

Alguém poderia me ajudar, por favor?
Obrigado. Filipe.

Eis o código do programa:

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

public class Main {

	public Main() throws Exception {
		// TODO Auto-generated constructor stub

		InputStream src = this.getClass().getResourceAsStream("/resources/MeuPrograma.exe");
		if (src != null) {
			File exeTempFile = File.createTempFile("MeuPrograma", ".exe", new File("C:\\SistADI\\sist\\infantil"));
			byte[] ba = new byte[src.available()];
			src.read(ba, 0, ba.length);
			exeTempFile.deleteOnExit();
			FileOutputStream os = new FileOutputStream(exeTempFile);
			os.write(ba, 0, ba.length);
			os.close();

			String[] args = new String[3];
			args[0] = exeTempFile.getAbsolutePath();
			System.out.println(exeTempFile.getAbsolutePath());
			args[1] = "One";
			args[2] = "Two";
			Process ps = Runtime.getRuntime().exec(args);
			ps.waitFor();
			InputStream is = ps.getInputStream();
			byte b[] = new byte[is.available()];
			is.read(b, 0, b.length);
			System.out.println(new String(b));
		} else
			System.out.println("Executable not found");
	}

	public static void main(String[] args) throws Exception {
		new Main();
	}

}

Não sei o que pode estar acontecendo, mas acho que pode ser no seu InputStream, pois você passa um caminho relativo, não pode estar dando erro ali?

qmvini,

Olá, obrigado pela ajuda, onde exatamente você diz que o caminho está relativo?
Neste código o arquivo é executado antes de chegar na parte do InputStream…

Att,
Filipe.

Pessoal, ainda não consegui resolver, se alguém souber pra me ajudar. Ou se tiver alguma outra solução para o que eu preciso (Ter um .exe como resource, criar um temp dele e executá-lo e depois de finalizado apagá-lo).

Obrigado. Filipe.

E não dá nenhuma exception?

Olá ViniGodoy,

Não aparece nenhuma exception, o programa chega a copiar o .exe para o local mas não executa-o nem apaga-o depois.
Pelo Eclipse funciona normalmente.

Obrigado.

Obrigado pela ajuda qmvini e ViniGodoy;
Resolvi meu problema usando a API da Apache Commons IO.

Att,
Filipe.


package mypack;

import java.io.File;
import java.io.InputStream;

import org.apache.commons.io.FileUtils;

public class Main {

	public Main() throws Exception {
		// TODO Auto-generated constructor stub

		InputStream src = getClass().getResourceAsStream("/resources/myApp.exe");

		File exeTempFile = File.createTempFile("myApp", ".exe", new File("myPath"));
		exeTempFile.deleteOnExit();

		FileUtils.copyInputStreamToFile(src, exeTempFile);

		Process ps = Runtime.getRuntime().exec(exeTempFile.getAbsolutePath());
		ps.waitFor();

	}

	public static void main(String[] args) throws Exception {
		new Main();

	}

}