Prozess führt befehl nicht aus/ .jar wird nicht gestartet

  • C#
  • .NET 4.5

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von DaNeubi.

    Prozess führt befehl nicht aus/ .jar wird nicht gestartet

    Hallo Leute,

    da ich mittlerweile auf C# WPF umgestiegen bin, dachte ich mir, ich programmier mal ein etwas älteres Projekt nach.
    Folgendes Problem: Ich habe mich weitestgehendst am alten Code orientiert, da es bei diesem Funktioniert hat, nun startet er mit die Datei nicht mehr...
    Der Code ist noch nicht fertig, dennoch freue ich mich immer über Anregungen und Verbesserungsvorschläge.
    Falls ihr den alten Code auch noch sehen wollt, kann ich ihn noch reinpacken, will nur vorerst mal den Thread nicht überfüllen.

    Neuer Code:

    C#-Quellcode

    1. delegate void SetTextCallback(string text);
    2. Process server = new Process();
    3. public void SetText(string text)
    4. {
    5. if (this.richTextBox.Dispatcher.CheckAccess())
    6. {
    7. SetTextCallback d = new SetTextCallback(SetText);
    8. this.Dispatcher.Invoke(d, new object[] { text });
    9. }
    10. else
    11. {
    12. this.richTextBox.AppendText(text);
    13. }
    14. }


    C#-Quellcode

    1. try
    2. {
    3. Thread start = new Thread(new ThreadStart(serverstart));
    4. if (!start.IsAlive)
    5. {
    6. start.Start();
    7. if (start.IsAlive)
    8. {
    9. this.button1.IsEnabled = false;
    10. }
    11. }
    12. }


    C#-Quellcode

    1. public void serverstart()
    2. {
    3. try
    4. {
    5. if (uebergaben.modpack == 0)
    6. {
    7. server.StartInfo = new ProcessStartInfo("java.exe", "-Xmx" + uebergaben.ram + "M" + "-Xms" + uebergaben.ram + "M" + " -jar " + uebergaben.jarname);
    8. server.StartInfo.RedirectStandardOutput = true;
    9. server.StartInfo.RedirectStandardError = true;
    10. server.StartInfo.RedirectStandardInput = true;
    11. server.StartInfo.UseShellExecute = false;
    12. server.StartInfo.WorkingDirectory = uebergaben.jardire;
    13. server.OutputDataReceived += Server_OutputDataReceived;
    14. server.Start();
    15. server.BeginOutputReadLine();
    16. try
    17. {
    18. button2.Dispatcher.Invoke(new MethodInvoker(delegate
    19. { this.button2.IsEnabled = true; }));
    20. }
    21. catch (Exception)
    22. {
    23. System.Windows.MessageBox.Show("Es ist ein Fehler aufgetreten! Fehlercode #6", "Fehler!", MessageBoxButton.OK);
    24. // Fehlercode #6 meint ein Problem mit dem verfügbarmachen der stop/neustart buttons usw.
    25. try
    26. {
    27. this.server.Close();
    28. this.server.StandardOutput.Close();
    29. this.server.StandardInput.Close();
    30. this.server.StandardError.Close();
    31. button2.Dispatcher.Invoke(new MethodInvoker(delegate
    32. { this.button2.IsEnabled = false; }));
    33. }
    34. catch (Exception)
    35. {
    36. }
    37. }
    38. server.WaitForExit();
    39. }
    40. else if (uebergaben.modpack == 1)
    41. {
    42. //server.StartInfo = new ProcessStartInfo("java.exe", "-Xmx" + uebergaben.ram + "M" + "-Xms" + uebergaben.ram / 2 + "M" + " -jar " + uebergaben.jarname);
    43. }
    44. }
    45. catch (Exception f)
    46. {
    47. richTextBox.Dispatcher.Invoke(new MethodInvoker(delegate
    48. { richTextBox.AppendText(f.ToString()); }));
    49. System.Windows.MessageBox.Show("Es ist ein Fehler aufgetreten! Fehlercode #5", "Fehler!", MessageBoxButton.OK);
    50. //Fehlercode #5, Problem beim Starten/ausführen des Prozesses. Oder Fehler beim aufrufen von Java
    51. try
    52. {
    53. this.server.Close();
    54. this.server.StandardOutput.Close();
    55. this.server.StandardInput.Close();
    56. this.server.StandardError.Close();
    57. button2.Dispatcher.Invoke(new MethodInvoker(delegate
    58. { this.button2.IsEnabled = false; }));
    59. }
    60. catch (Exception)
    61. {
    62. }
    63. }
    64. }


    C#-Quellcode

    1. private void Server_OutputDataReceived(object sender, DataReceivedEventArgs e)
    2. {
    3. if (!String.IsNullOrEmpty(e.Data))
    4. {
    5. SetText(e.Data.ToString()+"\n");
    6. }
    7. }


    Vars:

    C#-Quellcode

    1. public class uebergaben
    2. {
    3. public static string jarname { get; set; }
    4. public static string jardire { get; set; }
    5. public static byte modpack { get; set; }
    6. public static short ram { get; set; }
    7. public static byte jarspeichern { get; set; }
    8. public static byte antiadmin { get; set; }
    9. }



    Hoffe ihr wisst wieso es mir diese xxx.jar nicht startet.
    Und wenns ein wirklich einfacher Fehlst ist, bitte nicht sagen sondern schmeißt mir Begriffe an den Kopf da komm ich dann hoffentlich selbst drauf. :thumbsup:
    Danke im Voraus.
    DaNeubi
    @DaNeubi Wozu packst Du den Start des Prozesses in einen separaten Thread?
    Der gestartete Prozess selbst läuft doch in einem separaten Thread.
    Läuft denn der alte Code noch in Deiner Entwicklungsumgebung? Wenn ja, könntest Du den alten gegen den neuen Code laufen lassen (Debug, schrittweise einzeln und abwechselnd je eine Zeile ausführen) und sehen, ob alles gleich abläuft.
    Stimmen die Parameter, die Du dem Prozess mitgibst? Überzeige Dich davon :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Hab mal ne Halbe Stunde pause gemacht und siehe da...
    Ich hab noch nichts für 2 Parameter definert vergessen...

    Habs ohne Thread danke für den Tipp :)