Laden...

Programm mit Benutzeroberfläche aus einem Dienst heraus starten [und Alternativen]

Erstellt von Franklin vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.949 Views
Thema geschlossen
F
Franklin Themenstarter:in
56 Beiträge seit 2010
vor 12 Jahren
Programm mit Benutzeroberfläche aus einem Dienst heraus starten [und Alternativen]

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");
            }

C
1.214 Beiträge seit 2006
vor 12 Jahren

Das Problem wird sein, dass du das aus einem Dienst heraus starten willst, damit hast du keinen Zugriff auf die GUI.

F
Franklin Themenstarter:in
56 Beiträge seit 2010
vor 12 Jahren

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

Hinweis von herbivore vor 12 Jahren

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.

C
1.214 Beiträge seit 2006
vor 12 Jahren

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.

2.891 Beiträge seit 2004
vor 12 Jahren

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.

F
Franklin Themenstarter:in
56 Beiträge seit 2010
vor 12 Jahren

Okay das heisst so viel wie es ist praktisch unmöglich!!

Oder hättest du eine Idee?!

Danke

1.346 Beiträge seit 2008
vor 12 Jahren

Unmöglich. Du kannst als Dienst ja auch nie sicher sein, ob überhaupt jemand angemeldet ist

C
2.121 Beiträge seit 2010
vor 12 Jahren

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.

F
Franklin Themenstarter:in
56 Beiträge seit 2010
vor 12 Jahren

Okay besten dank...dann muss ich wohl anders vorgehen.

Danke trotzdem

2.891 Beiträge seit 2004
vor 12 Jahren

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.

Hinweis von herbivore vor 12 Jahren

Das Thema wurde oft genug besprochen. Alles weitere über die Forensuche. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.

Thema geschlossen