Auf bereits geöffnete Programminstanz zugreifen und ggf. Methoden aufrufen.

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Auf bereits geöffnete Programminstanz zugreifen und ggf. Methoden aufrufen.

    Ich habe bereits überprüft, ob diese Programminstanz bereits existiert.
    Jetzt möchte ich, wenn diese Instanz existiert, eine Methode aufrufen, die das Programm ein wenig beeinflusst.
    Nur genau weil ich nicht, wie ich das zu handhaben habe.
    Meine Überprüfungsroutine:

    Quellcode

    1. private static bool AlreadyRunning()
    2. {
    3. Process current = Process.GetCurrentProcess();
    4. Process[] processes = Process.GetProcessesByName(
    5. current.ProcessName);
    6. foreach (Process process in processes)
    7. {
    8. if (process.Id != current.Id)
    9. {
    10. if (Assembly.GetExecutingAssembly().Location
    11. .Replace("/", "\\") == current.MainModule.FileName)
    12. {
    13. return true;
    14. }
    15. }
    16. }
    17. return false;
    18. }


    Ich hoffe ihr versteht was ich meine.
    Hi
    das macht man normalerweise per Mutex o.Ä. Der Mutex wird beim Prozessstart geöffnet und beim Programmabschluss wieder geschlossen. Wichtig ist, dass du dabei einen systemweiten Mutex verwendest und abgfrägst, ob er erzeugt wurde (der Konstruktor bietet so eine Überladung). Eine Kommunikation mit dem anderen Prozess kann anschließend per Pipe oder Ipc stattfinden. Da die frameworkinterne Ipc auf Basis von Pipes realisiert wurde und etwas schwieriger zu bedienen ist, wäre Pipe z.B. sehr gut dazu geeignet. Windows messages sowie Standard-IO halte für eine eher unelegante Lösung.
    Pipe und Ipc werden vom FW angeboten.

    Gruß
    ~blaze~