Laden...

anderes Program korrekt beenden

Erstellt von STF-DIR vor einem Jahr Letzter Beitrag vor einem Jahr 720 Views
S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor einem Jahr
anderes Program korrekt beenden

Hallo,

vielleicht kann ja jemand helfen.

Ich habe ein kleines Program ( client ), welches über das netzwerk mit meinm Server verbungen ist und dieser dann ein anderes Program startet, ist so eine Art Remote.

Das funktioniert ganz gut.

Das Problem ist, das ich das gestartete Program ordentlich schließen muss.
Das heißt, wenn ich in dem Program oben rechts auf das "X" klicke und es so beende, dann macht das noch so eine Art kleanup.
Man sieht dann auch das da noch ein kleines Fenster kurz auftaucht wo eine Session geschlossen wird.
Schließe ich das Program nun einfach indem ich den Task beende und starte es dann wieder, dann kommt da eine Meldung, das wohl noch eine Session offen ist.

Also die Frage ist, wie ich in C# das Program schlißen kann und es dann so beendet wird als ob man es über das "X" beendet, also ordentlich sozusagen.

Danke
Matthias

4.931 Beiträge seit 2008
vor einem Jahr

Bei einem GUI-Programm kann man Process.CloseMainWindow (sowie anschließend Process.Close) aufrufen. Das startende Programm muß sich also dessen Process-Instanz merken.

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor einem Jahr

Hallo,

sorry für die späte Antwort und danke, werd ich versuchen.

Matthias

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor einem Jahr

Hello,

also ich hab den Process gefunden und identifiziert.


Process.GetProcessesByName(processName);
.
.
.

Dann mit CloseMainWindow beendet.
Das beenden funktioniert super.
Leider passiert dann genau das was ich im ersten Post beschrieben habe.
Wenn ich also den Prozess so beende und dann das Program neu starte, dann kommt da die
Meldung, das wohl noch eine Session offen ist.

Wenn ich das Programm normal, also über das "X" beende, dann kommt da auch noch ein kleines Fenster wo diese
Session geschlossen wird.
Das kommt aber nicht, wenn ich den Prozess über CloseMainWindow beende.

Gibt es da noch andere Möglichkeiten ?

Matthias

2.078 Beiträge seit 2012
vor einem Jahr

Entwickelst Du das andere zu beendende Programm selber?
Dann baue eine kleine IPC (Inter-process communication) API, die dafür eine Funktion bietet.

Ist es nicht dein Programm und gibt es keine geeignete API, dann bleibt dir vermutlich nur noch die Option, die nötigen Klicks zum Schließen zu simulieren.
Das geht über die WinAPI, aber mal eben ein paar Zeilen Code sind das dann nicht mehr. Such dazu einfach nach "c# simulate mouse click".
Aber glaub mir, das sollte die letzte Option sein ^^

Wenn Du Glück hast, ist es .NET und Du kannst die exe als Referenz verwenden und den Code aus der Main-Methode in einem eigenen kleinen Wrapper-Programm nachbauen.
Wenn das funktioniert (wenn Du Glück hast) könntest Du dann auf diese Weise eine solche API von außen "drum herum hängen" und Du startest und beendest dein Wrapper-Programm.

4.931 Beiträge seit 2008
vor einem Jahr

Dann verhält sich das andere Programm aber sehr seltsam, denn CloseMainWindow() sendet einfach die WM_CLOSE-Nachricht an das Fenster (das auch bei Klick auf den Button "X" gesendet wird).

Erscheint denn das Cleanup-Fenster auch, wenn du manuell "ALT+F4" bei dem anderen Programm aufrufst?

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor einem Jahr

Hallo,

nein, das andere Program is nicht von mir. Es nennt sich Active Sky for Prepar3D von hifisimtech.

Wenn ich ALT+F4 drücke, dann kommt das kleine Fenster mit der Info das die Session beendet wird leider auch nicht.
Ich hab keine Idee wie ich das machen kann.

Der Developer ist leider auch nicht sehr hilfsbereit.

Matthias

4.931 Beiträge seit 2008
vor einem Jahr

Dann ist das wohl kein Standard-Windows Programm, sondern zeichnet selber den X-Button (wie z.B. in Eigene Window Rahmen zeichnen beschrieben).
So wie Palladin007 schon geschrieben hat, hilft dann wohl nur die Simulation des Mausklicks.

2.078 Beiträge seit 2012
vor einem Jahr

Oder es klappt, einen eigenen Wrapper zu bauen, wenn es .NET ist.
Du kannst ja mal schauen, ob ILSpy etwas damit anfangen kann.
Braucht vermutlich etwas Reverse engineering, aber ein Versuch schadet nicht.