Guten Tag zusammen
Ich habe ein C# Windows Service der meine Java Application überwacht.
Wenn der Process meiner Java application nicht mehr läuft dann will ich diese aus dem Service neu starten.
Ich habe diesen Code dazu.
Der prozess also sprich die VM startet aber es geht kein Fenster auf.
Wenn ich doppelklicke auf die jar datei funktioniert alles.
Kann mir jemand weiter helfen?!?
Danke schon im voraus!!
var processInfo = new ProcessStartInfo("java.exe", "-jar C:/Users/Administrator/Desktop/Test.jar")
{
CreateNoWindow = false,
UseShellExecute = false
};
Process proc;
if ((proc = Process.Start(processInfo)) == null)
{
EventLog.WriteEntry("null", EventLogEntryType.Error);
throw new InvalidOperationException("null");
}
Das Problem wird sein, dass du das aus einem Dienst heraus starten willst, damit hast du keinen Zugriff auf die GUI.
Danke für die schnelle Antwort.
Aber wiso söll ich keinen Zugriff auf die GUI haben?!
Ich starte ja die Java VM und übergebe ihr die jar datei...
Gruss
Statt uns die Frage zu stellen, hättest du einfach mal suchen können. Das Thema wurde schon x-mal besprochen, inkl. möglicher Lösungen. Dann wäre und die unnötige Wiederholung des Themas erspart geblieben. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.
Das hängt mit den Sessions zusammen... Es ist schon möglich, aber ich weiß nicht, ob die API Funktionen in .NET gewrappt sind, ich glaube nicht.
Aber wiso söll ich keinen Zugriff auf die GUI haben?!
Weil deine Anwendung, die den Prozess startet, ein Dienst ist. In älteren Windows-Versionen ist es ein paar Einstellungen noch möglich, dass ein Dienst eine GUI starten kann; ab Windows Vista laufen Dienste aber komplett in einer anderen Session und haben keinerlei Möglichkeit, Benutzeroberflächen anzuzeigen.
Okay das heisst so viel wie es ist praktisch unmöglich!!
Oder hättest du eine Idee?!
Danke
Unmöglich. Du kannst als Dienst ja auch nie sicher sein, ob überhaupt jemand angemeldet ist
Mach dir doch ein fensterbasiertes Programm und starte das im Autostart. Das soll dannn die Überwachung machen.
Nur dann wenn dieses Programm starten kann, kann auch dein Java Fenster aufgehen.
Okay besten dank...dann muss ich wohl anders vorgehen.
Danke trotzdem
Okay das heisst so viel wie es ist praktisch unmöglich. Oder hättest du eine Idee?
Als Dienst ist es wie gesagt aufgrund der Session 0 Isolation in den neueren Windows-Versionen unmöglich.
Du benötigst eine "normale" Anwendung (die z.B. im Autostart gestartet wird), die die Java-Applikation mit Fenster startet. Entweder diese Anwendung übernimmt selbst die Überwachung (und das Starten), oder aber der Überwachungs-Dienst muss mit dieser Anwendung kommunizieren, um die Java-Applikation zu starten.
Das Thema wurde oft genug besprochen. Alles weitere über die Forensuche. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.