Named Mutex -> Herausbekommen, wem das Teil gehört?


  • Administrator

    Hallo zusammen,

    Ich kann einen Doppelstart einer Anwendung über einen Named Mutex verhindern, so wie ich das bisher auch mit der WinAPI gemacht habe. Ich hoffe zumindest, dass dies so geht, zumindest scheint es zu funktionieren in meinen Testprogrammen. Zur Sicherheit setze ich den Code trotzdem hin 🙂

    using System.Threading;
    
    // ...
    
    bool wasMutexCreated;
    Mutex appMutex = new Mutex(false, "irgendeinStringDerHoffentlichNichtZweimalVorkommt und nicht länger als 255 Zeichen ist.", wasMutexCreated);
    
    if(wasMutexCreated)
    {
      // Programm normal laufen lassen.
    
      // Am Ende:
      appMutex.ReleaseMutex();
    }
    else
    {
      // Das andere Programm benachrichtigen.
      // Bloss wie komme ich zum anderen Programm?
    }
    

    Wahrscheinlich muss ich wohl über P/Invoke das SendMessage oder PostThreadMessage reinholen, aber woher kriege ich die Zieladresse heraus, also das entsprechende Windowhandle oder die Thread ID?
    Und gibt es eine Alternative in C#, bzw. .Net, zu SendMessage/PostThreadMessage?

    Wäre dankbar für die Hilfe.
    Ein Link mit der Antwort reicht auch schon völlig aus 😉

    Grüssli



  • Vielleicht hilft das:
    http://www.mycsharp.de/wbb2/thread.php?threadid=36135
    du musst wohl über den Prozessnamen die PID herausbekommen und dann z. B. mit PostMessage arbeiten


  • Administrator

    Huff, danke.
    Dass sowas nicht einfacher geht, ist mir manchmal ein Rätsel 😉

    Grüssli


Log in to reply