Mutex und Remote

mdo

Mitglied
Hallo!
Ich will ein Programm schreiben, welches nur einmal geöffnet werden darf. Außerdem soll es, wenn bereits eine Instanz des Programms offen ist, dem geöffneten Programm 2-3 Befehle mitteilen und sich dann erst beenden.
Also:

1:
myApp.exe "C:\test.txt"
-> Programm startet sich mit der Datei "C:\test.txt"

2:
myApp.exe "C:\test2.txt"
-> Programm merkt, dass bereits eine Instanz offen ist.
-> Programm sagt der offenen Instanz, dass "C:\test.txt" geschlossen werden soll
-> Programm sagt der offenen Instanz, dass "C:\test2.txt" geöffnet werden soll
-> Programm schließt sich wieder

Umsetzen würde ich es gerne mit Mutex. Folgenden Code habe ich bereits implementiert:

Code:
namespace NS_MYAPP
{
    static class Program
    {
        //Mutex
        private static Mutex mutex;
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            if (CheckMutex())
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                try
                {
                    Application.Run(new Form1(args));
                }
                catch (Exception ex)
                {
                    //Tue nichts...
                }

                //Mutex freigeben
                if(null != mutex)
                    mutex.ReleaseMutex();

                //Application beenden
                Application.Exit();
            }
            else
            {
                //#1#
                //Ab hier per Remote die bestehende Instanz ansprechen!?
                mutex.CreateObjRef(...
            }
        }

        private static bool CheckMutex()
        {
            bool firstInstance = false;
            try
            {
                try
                {
                    mutex = Mutex.OpenExisting("Local\\" + Application.ProductName);
                }
                catch (Exception ex1)
                {
                    firstInstance = true;
                }

                if (mutex == null)
                {
                    mutex = new Mutex(true, "Local\\" + Application.ProductName);

                    GC.KeepAlive(mutex);
                }
            }
            catch (Exception ex)
            {
                
            }
          
            return firstInstance;
        }
    }
}

Das da sollte schonmal funktionieren... Allerdings weiß ich nicht wie ich das Remoting nun implementieren soll. Ich habe bereits im Netz ausführlich gesucht und bin auf die Methode "createObjRef(Type)" des Mutex Objekts gestoßen. Mit dieser sollte man ein Proxy-Objekt der offenen Instanz erstellen können. Aber ab hier ist dann Feierabend. Was mache ich mit so einem Proxy Objekt? Wie gehts ab hier weiter?

Kennt sich jemand hier ein wenig aus?

Danke!
mdo
 
Zuletzt bearbeitet:
Zurück