Aufruf einer .exe datei, in einem jar

hankenberge

Mitglied
hallo zusammen,

ich möchte gerne eine .exe-Date aufrufen die sich in einem jar-datei befindet.
Images bekomme ich aus dem jar raus, wie geht denn das mit einer exe?
Danke

Ingo
 
lesen, in eine neue (ungepackte) Datei schreiben und dann mit ausführen. Ohne sie auf die Platte zu schreiben wird es nicht gehen fürchte ich (ausser mit viel Aufwand über die JNI)
 
Hallo!

Das exe Dateien ja nur unter Windows gibt können wir es uns schön einfach machen:

http://www.winzip.de/wzcline.htm

Von java aus rufen wir dann dieses WinZip Konsolen tool auf mitdem wir dann ganz einfach mit bestimmten Parametern eine Exedatei aus einem Zip Archiv (jars sind nichts anderes) aufrufen können ohne das ganze zu Entpacken.

Eine andere Möglichkeit würde daraus bestehen die Exe Datei per InputStream aus dem Jar zu laden das Ding auf die Platte zu schreiben den InputStream zu schließen und das Programm auszuführen. Nach erfolgreicher Ausführung könnte man die exe wieder löschen.

Gruß Tom
 
nachfrage

Original geschrieben von Thomas Darimont

Eine andere Möglichkeit würde daraus bestehen die Exe Datei per InputStream aus dem Jar zu laden das Ding auf die Platte zu schreiben den InputStream zu schließen und das Programm auszuführen. Nach erfolgreicher Ausführung könnte man die exe wieder löschen.

Gruß Tom

danke tom für diesen tip

der erste fällt leiderraus. ich soll am ende nur eine einzige Datei haben.

kann du mir das obrige etwas genauer erkären

wenn ich es richig verstanden habe. lese ich es mit dem inputstream aus, ok!
dann auf Platte wegschreiben, wie?

danke

ingo
 
Hallo!

Wie wär's denn damit:

Code:
package de.tutorials.java;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class ExeFromJarExecutor {

	public static void main(String[] args) {
		new ExeFromJarExecutor().launch();
	}

	private void launch() {

		InputStream is =
			ExeFromJarExecutor.class.getResourceAsStream("calc.exe");
		BufferedInputStream bis = new BufferedInputStream(is);

		File userHome =
			new File(System.getProperties().get("user.home").toString());

		String appPath =
			userHome.getAbsolutePath() + File.separatorChar + "calc.exe";

		System.out.println(appPath);
		
		File appFile = new File(appPath);

		try {
			BufferedOutputStream bos =
				new BufferedOutputStream(new FileOutputStream(appFile));

			byte[] buffer = new byte[8192];
			int len = 0;

			while ((len = bis.read(buffer)) > 0) {
				bos.write(buffer, 0, len);
			}
			bos.flush();
			bos.close();
			bis.close();

			Process p = Runtime.getRuntime().exec(appPath);
			p.getErrorStream().close();
			p.getOutputStream().close();
			p.getInputStream().close();
			int exitCode = p.waitFor();
			appFile.deleteOnExit();
			System.out.println(exitCode);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

	}
}

Anhang: Eclipse Projekt (calc.exe ist der Windows Taschenrechner)
Einfach mit der rechten Maustaste (in Eclipse) auf build.xml und run ant auswählen.

HTH

Gruß Tom
 

Anhänge

Zurück