Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Like Tree1Danke
  • 1 Beitrag von Shakie
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
1117
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mdo mdo ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    37
    Hallo alle zusammen!
    Ich habe da ein kleines Problem:

    Ich habe ein Java-Programm, welches sich bei einem shutdownhook von Außen "anständig" beendet. Es wartet auf alle Threads und beendet sich dann. Dies Funktioniert auch bestens unter Linux.

    Nun will ich dieses Javaprogramm allerdings auf einem Windowsserver laufen lassen und von Außen mit einem C# Programm beenden. Allerdings schießt Process.kill() den Prozess einfach nur ab und CloseMainWindow() bewirkt genau garnichts...
    Also wie kann ich aus einer C# Anwendung ein Javaprogramm beenden, indem ich ihm ein shutdownhook sende?
    Hat jemand da Erfahrung oder wenigstens eine Idee?

    MfG
    mdo

    PS:
    Die .jar Datei des Javaprogramms habe ich mit JAR2EXE in eine .exe Datei umgewandelt.
    Bei dem Javaprogramm handelt es sich um ein Serverprogramm ohne GUI.
    Bei der C# Anwendung handelt es sich um ein Programm, welches als Tray-Icon fungiert.
     

  2. #2
    mdo mdo ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    37
    Ui, doch so viele Antworten

    Naja, ich habe meine Überlegungen mittlerweile etwas weiter angestrengt und habe eventuell eine alternative Lösung:

    Ich müsste vom C# Prozess einen C# Service per Remote ansprechen, und dann vom C# Service per Remote das Java Programm ansprechen. Eine Idee wie das geht?
    Ich weiß, dass man mit .NET 3.5 über Pipes das ganze machen kann... Allerdings entwickle ich für .NET 2.0 und im Javaprogramm kann ich das wohl komplett vergessen...

    Also:
    1. Kommunikation zwischen C# Prozess und C# Service, so dass der Service eine Methode starten kann, welche Verbindung mit dem Javaprogramm aufnehmen kann
    2. Kommunikation zwischen dieser C# Service Methode und einem Javaprogramm, so dass das Javaprogramm eine Methode zum eigenen Beenden ausführen kann

    Was haltet ihr von diesem alternativen Ansatz? Kennt sich damit jemand aus? Wäre für Hilfe sehr dankbar!

    MfG
    mdo
     

  3. #3
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    1.995
    Ich kann dir zwar keine Antwort geben, aber wofür den Service? Alles was dein Service machen kann, kann dein Prozess doch auch selber machen (falls gleiche Rechte etc. vorliegen).
     
    hihi = -h²

  4. #4
    mdo mdo ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    37
    Ja, in dem ersten Post habe ich den Service weggelassen um das Problem nicht zu kompliziert zu gestalten.
    Aber um den Ablauf genau zu beschreiben:

    Ein Service wird automatisch gestartet. Beim Start, startet dieser Service das Javaprogramm. Das muss so sein, damit das Javaprogramm gestartet wird, obwohl sich noch kein Benutzer angemeldet hat. Und es wird auch nicht beendet, wenn sich ein Benutzer abmeldet. Es läuft quasi immer, solange man den Rechner nicht ausmacht oder den Prozess des Javaprogramms beendet (von Hand, oder durch die OnStop() Methode des Services)

    Jetzt will ich eine GUI bauen, um das Javaprogramm zu starten und zu beenden. Dazu starte ich aus der GUI heraus den Service und beende auch den Service. Der Service startet und beendet seinerseits das Javaprogramm. Das muss so sein, weil sonst nach Abmelden des Benutzers, der die GUI gestartet hat, das Javaprogramm beendet würde... Da das nicht gewollt ist, muss ich von der GUI aus den Service steuern. Kompliziert, aber es gibt keinen anderen Weg.

    Jedenfalls funktioniert das alles schon wunderbar. Allerdings wird beim Beenden des Javaprogramms durch den Service, das Javaprogramm einfach nur "gekillt", ohne dass es eine Möglichkeit hat, auf seine offenen Threads zu warten. Und genau hier muss etwas getan werden. Und aus diesem Grund brauche ich die Kommunikation von GUI zu Service (beides C#) und dann von Service zu Javaprogramm.
     

  5. #5
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    1.995
    Um Services zu steuern gibt es die ServiceController-Componente.
    Mit der ServiceName-Eigenschaft kannst du festlegen, welchen Service du steuern möchtest. Mit der ExecuteCommand-Methode kannst du mit dem Service kommunizieren (habe das nur aus der MSDN; habe selber keine Erfahrung damit).
    Bleibt aber immer noch das Problem das Java-Programm ordentlich zu beenden...
    mdo bedankt sich. 
    hihi = -h²

  6. #6
    mdo mdo ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    37
    Oha, vielen Dank für den Tip! Ich starte und beende mit der ServiceController-Componente den Service bereits, allerdings wusste ich nicht dass ich dem Service damit ein Command geben kann... Das werd ich morgen mal genau testen! Damit wäre das halbe Problem hoffentlich behoben...

    Erstmal Danke soweit! Hoffe für das andere Problem fällt auch noch jemandem etwas nützliches ein.
     

  7. #7
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    1.995
    Du könntest noch probieren WM_QUIT oder WM_CLOSE an die Java-Anwendung zu senden. Hier hatte jemand in C++ das selbe Problem wie du (fensterlose Anwendung schließen).
     
    hihi = -h²

  8. #8
    mdo mdo ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    37
    Hallo!
    Jo ich habs jetzt ganz anders gelöst...
    Da das Javaprogramm sowohl Linux als auch Windowsfähig sein soll und so oder so auf 3 Ports ständig am lauschen ist, hab ich es mit Portkommunikation gelöst.
    Ich sende dem Server über nen Port zB ein #CLOSE und er beendet sich

    Aber danke für deine Mühe
     

Ähnliche Themen

  1. Anwendung starten und beenden
    Von AckiB im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 03.04.08, 13:06
  2. Antworten: 2
    Letzter Beitrag: 25.09.07, 17:47
  3. computer mit java programm beenden
    Von bartlb im Forum Java
    Antworten: 1
    Letzter Beitrag: 18.09.07, 07:53
  4. Windows 98 per Anwendung beenden
    Von MarkusG im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 04.10.05, 10:08
  5. beenden der anwendung
    Von thecooper im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 26.07.03, 16:04