Laden...

Prüfen ob Prozess läuft und dann Parameter an den laufenden übergeben

Erstellt von Nathan1995 vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.351 Views
Thema geschlossen
N
Nathan1995 Themenstarter:in
19 Beiträge seit 2011
vor 11 Jahren
Prüfen ob Prozess läuft und dann Parameter an den laufenden übergeben

Aloha liebe Community,
ich habe ein kleines Problem. Mein Programm wird mit einem Parameter aufgerufen und soll dann etwas dynamisch hinzufügen, dies klappt auch, jedoch soll sich das Programm bei der nächsten Parameterübergabe nicht noch einmal öffnen, sondern dann wieder der Inhalt zum alten Programm hinzugefügt werden. Das Verhindern des zweiten Startes hab ich schon herausgefunden:

static void Main()
        {
            
            bool createdNew;

            System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createdNew);
            if (createdNew)
            {
                // bitte Form1 ersetzen 
                Application.Run(new Form1());
                // und auch wieder Freigeben besser ist besser
                mutex.ReleaseMutex();
            }
            else
            {
                get();
                MessageBox.Show("Programm wurde bereits gestartet!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Jedoch hapert es jetzt daran dem alten Prozess den neuen Parameter zu übergeben. Hierbei hab ich jetz folgendes:

static void get()
        {
            

            string name = Assembly.GetExecutingAssembly().GetName().Name;
            int currentId = Process.GetCurrentProcess().Id;
            EnumThreadDelegate callbackDelegate = new EnumThreadDelegate(Callback);
            foreach (Process p in Process.GetProcessesByName(name))
            {
                if (p.Id != currentId)
                {
                    IntPtr mainwindowHandle = p.MainWindowHandle;
                    if (mainwindowHandle != IntPtr.Zero)
                    {
                        StringBuilder str = new StringBuilder();
                        str.Append("asdf");
                        SendMessage(mainwindowHandle, 0x8000 + 1, (IntPtr)(0x000C),str);
                    }
                    //Wenn die Anwendung kein eingetragenes hauptfenser hat:
                    else
                    {
                        foreach (ProcessThread thread in p.Threads)
                        { EnumThreadWindows(thread.Id, callbackDelegate, (IntPtr)0); }
                    }
                    //---
                }
            }
        }

Jedoch hab ich erlich gesagt keine ahnung, wie ich das jetzt im alten Programm abrufen soll. Bis jetzt hab ich da nur

 protected override void WndProc(ref Message m)
        {
            
            base.WndProc(ref m);
        }

auf die Reihe bekommen, weiß aber nicht wie ich weiter vorgehen soll. Ich hoffe ihr könnt mir helfen und meine Fehler mir aufdecken, bzw mir weiterhelfen.

Vielen Dank für Antworten.

Mit freundlichem Gruß

euer Nathan

P
992 Beiträge seit 2007
vor 11 Jahren

Schau dir mal die WCF an, damit kannst du wunderbar mit anderen Prozessen kommunizieren.

2.891 Beiträge seit 2004
vor 11 Jahren

Da gibt es mehrere Möglichkeiten. Z.B.:*WCF/Remoting *WindowMessages *NamedPipes

Aber wenn du [FAQ] mehrere Programminstanzen verhindern (inkl. Parameterübergabe) ordentlich gelesen hättest: Da wird auf Andere Instanz benachrichtigen (Window-Messages) verwiesen, wo es schon fertigen Code dafür gibt.

Thema geschlossen