sfxMain.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. package de.nplusc.izc.izformats;
  6. import java.io.BufferedReader;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.io.InputStreamReader;
  10. import java.io.PrintStream;
  11. import java.io.UnsupportedEncodingException;
  12. import java.net.URL;
  13. import java.net.URLDecoder;
  14. import java.util.Map;
  15. import java.util.Scanner;
  16. import javax.swing.JFileChooser;
  17. import javax.swing.JTextArea;
  18. /**
  19. *
  20. * @author LH
  21. */
  22. public class sfxMain
  23. {
  24. public static void main(String args[])
  25. {
  26. try
  27. {
  28. //String path = processEnvVarsinLine("%temp%/iZunpaq");
  29. String path2 = sfxMain.class.getProtectionDomain().getCodeSource().getLocation().getPath();
  30. String decodedPath = URLDecoder.decode(path2, "UTF-8");
  31. System.out.println(decodedPath);
  32. IZPackage izp = new IZPackage(decodedPath);
  33. String[] content = izp.getFileList();
  34. boolean gotparamfile=false;
  35. boolean installer = false;
  36. boolean portableapp=false;
  37. for (String string : content)
  38. {
  39. if(string.equals("params.sfx"))
  40. {
  41. gotparamfile=true;
  42. }
  43. if(string.equals("sfx.bat"))
  44. {
  45. installer=true;
  46. }
  47. if(string.equalsIgnoreCase("portableapp"))
  48. {
  49. portableapp=true;
  50. }
  51. }
  52. String path = FileTK.getFilePath(decodedPath);
  53. if(portableapp)
  54. {
  55. path=processEnvVarsinLine("%temp%\\"+new File(decodedPath).getName());
  56. }
  57. String execafterXTract="";
  58. if(gotparamfile)
  59. {
  60. execafterXTract = replaceHashmarkedVars(izp.getFileContent("params.sfx"), "path", path);
  61. execafterXTract = replaceHashmarkedVars(execafterXTract, "sfxjar", decodedPath);
  62. }
  63. izp.unload();
  64. IZPackage.ExtractFilesToPath(decodedPath, path);
  65. if(gotparamfile)
  66. {
  67. FileTK.writeFile(execafterXTract,path+File.separator+"sfx.bat");
  68. runSingleCmd(path+File.separator+"sfx.bat");
  69. }
  70. else
  71. {
  72. if(installer)runSingleCmd(path+File.separator+"sfx.bat");
  73. }
  74. //exec
  75. }
  76. catch (UnsupportedEncodingException ex)
  77. {
  78. ex.printStackTrace();
  79. }
  80. }
  81. public static String replaceHashmarkedVars(String line,String varname,String toReplace)
  82. {
  83. System.out.println("in: "+line);
  84. String linemod = line;
  85. int varstart = linemod.indexOf("#");
  86. int varend = linemod.indexOf("#", varstart + 1);
  87. String preVar = "";
  88. if (varstart == -1||varend == -1)
  89. {
  90. System.out.println("NullVar");
  91. return line;
  92. }
  93. if (varstart > 0)
  94. {
  95. preVar = linemod.substring(0, varstart);
  96. }
  97. String postVar = linemod.substring(varend + 1);
  98. String var = linemod.substring(varstart + 1, varend);
  99. System.out.println("davor: "+varstart);
  100. System.out.println("var: "+var);
  101. System.out.println("ende: "+varend);
  102. if(var.equalsIgnoreCase(varname))
  103. {
  104. System.out.println("recurseNormal");
  105. var = toReplace;
  106. postVar=replaceHashmarkedVars(postVar, varname, toReplace);//falls sich noch wo anders eine versteckt
  107. }
  108. else
  109. {
  110. System.out.println("recurseOther");
  111. var="#"+var+"#";
  112. postVar=replaceHashmarkedVars(postVar, varname, toReplace);//falls sich noch wo anders eine versteckt
  113. }
  114. line = preVar + var + postVar;
  115. System.out.println("Retval"+line);
  116. return line;
  117. }
  118. public static String processEnvVarsinLine(String line)
  119. {
  120. Map<String, String> env = System.getenv();
  121. String linemod = line;
  122. int varstart = linemod.indexOf("%");
  123. int varend = linemod.indexOf("%", varstart + 1);
  124. String preVar = "";
  125. if (varstart == -1)
  126. {
  127. return line;
  128. }
  129. if (varstart > 0)
  130. {
  131. preVar = linemod.substring(0, varstart);
  132. }
  133. String postVar = linemod.substring(varend + 1);
  134. String var = linemod.substring(varstart + 1, varend);
  135. var = env.get(var.toUpperCase());
  136. line = preVar + var + postVar;
  137. return line;
  138. }
  139. public static String FileChooseDlg(javax.swing.JFrame frm)
  140. {
  141. return FileChooseDlg(frm,false,false,null);
  142. }
  143. public static String FileChooseDlg(javax.swing.JFrame frm,boolean restrict,boolean dirsOnly,String[] exts)
  144. {
  145. JFileChooser fc = new JFileChooser();
  146. String ret = "";
  147. //fc.
  148. if(!dirsOnly)
  149. fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
  150. else
  151. fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  152. if(restrict)
  153. {
  154. FIleLImiter f = new FIleLImiter();
  155. f.setExtensions(exts);
  156. fc.setFileFilter(f);
  157. }
  158. int returnVal = fc.showOpenDialog(frm);
  159. if (returnVal == JFileChooser.APPROVE_OPTION)
  160. {
  161. File file = fc.getSelectedFile();
  162. try
  163. {
  164. //This is where a real application would open the file.
  165. ret = file.getCanonicalPath();
  166. }
  167. catch (IOException ex)
  168. {
  169. }
  170. }
  171. return ret;
  172. //log.setCaretPosition(log.getDocument().getLength());
  173. }
  174. public static void runSingleCmd(String... runnable)
  175. {
  176. runSingleCmd(true, runnable);
  177. }
  178. public static void runSingleCmd(boolean logg, String... runnable)
  179. {
  180. runSingleCmd(true, false, runnable);
  181. }
  182. public static void runSingleCmd(boolean logg, boolean legacy, String... runnable)
  183. {
  184. runSingleCmd(logg, legacy, false, runnable);
  185. }
  186. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret, String... runnable)
  187. {
  188. return runSingleCmd(logg, legacy, sret, null, runnable);
  189. }
  190. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret,JTextArea tx, String... runnable)
  191. {
  192. return runSingleCmd(logg, legacy, sret, false, tx, runnable);
  193. }
  194. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret,boolean asArray,JTextArea tx, String... runnable)
  195. {
  196. return runSingleCmd(logg, legacy, sret, asArray, tx, null, runnable);
  197. }
  198. private static Process p;
  199. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret,boolean asArray,final JTextArea tx, final PrintStream pw, String... runnable)
  200. {
  201. boolean execCrashed = false;
  202. String cret = "";
  203. //String rn = runnable[0];
  204. //String[]temp = runnable[0].split("\\.");
  205. /*if("bat".equals(temp[temp.length-1]))
  206. {
  207. runnable[0] = "cmd.exe";
  208. runnable[1] = "/c";
  209. runnable[2] = "\"\""+rn+"\" \"";
  210. }*/
  211. //else
  212. //{
  213. //String[] r2 = runnable;
  214. //}
  215. String cmd = "";
  216. if(!asArray)
  217. {
  218. for (String string : runnable)
  219. {
  220. cmd += string + " ";
  221. cmd = cmd.trim();
  222. }
  223. }
  224. try
  225. {
  226. {
  227. p = null;
  228. if(!asArray)
  229. p=Runtime.getRuntime().exec(cmd);
  230. else
  231. p=Runtime.getRuntime().exec(runnable);
  232. if(tx!=null)
  233. {
  234. new Thread(
  235. new Runnable()
  236. {
  237. @Override
  238. public void run()
  239. {
  240. Scanner scanner = new Scanner(p.getInputStream());
  241. Scanner scannerE = new Scanner(p.getErrorStream());
  242. while ((scanner.hasNextLine()||scannerE.hasNextLine()))
  243. {
  244. if(scanner.hasNextLine())
  245. {
  246. String l = scanner.nextLine();
  247. tx.append(l+"\n");
  248. if(pw!=null)
  249. pw.println(l);
  250. }
  251. if(scannerE.hasNextLine())
  252. {
  253. String l = scannerE.nextLine();
  254. tx.append(l+"\n");
  255. if(pw!=null)
  256. pw.println(l);
  257. }
  258. }
  259. }
  260. }
  261. ).start();
  262. }
  263. if (sret)
  264. {
  265. cret = new BufferedReader(new InputStreamReader(p.getInputStream())).readLine();
  266. }
  267. int rv = p.waitFor();
  268. if(rv>0)
  269. {
  270. execCrashed=true;
  271. }
  272. }
  273. }
  274. catch (Exception ex)
  275. {
  276. //TODO:SetupError_Here
  277. //Logger.getLogger(Tools.class.getName()).log(Level.SEVERE, null, ex);
  278. }
  279. return cret;
  280. }
  281. }