# Aufruf einer .exe datei, in einem jar



## hankenberge (17. August 2004)

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


----------



## squeaker (18. August 2004)

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)


----------



## Thomas Darimont (19. August 2004)

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


----------



## hankenberge (31. August 2004)

*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


----------



## Thomas Darimont (31. August 2004)

Hallo!

Wie wär's denn damit:


```
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


----------



## Thomas Darimont (31. August 2004)

Du musst die calc.exe noch in das Verzeichnis .\bin\de\tutorials\java kopieren.

Gruß Tom


----------



## hankenberge (31. August 2004)

hey super,

danke
versuche ich morgen aus, heute ist feierabend 

ingo


----------



## hankenberge (7. September 2004)

*Perfekt*

Super vielen Dank
hat perfekt gepklappt!

Ingo


----------

