Як я можу використовувати mutex, щоб знайти перший процес за допомогою GUID і функцію виклику в ньому? Як і у веб-браузері, коли ви намагаєтеся запустити його вдруге, просто відкрийте нове вікно.
// appGuid is const string containing app GUID
using (Mutex mutex = new Mutex(false, "Global\" + appGuid))
{
if (!mutex.WaitOne(0, false))
{
// CODE TO FIND AND CALL FIRST PROCESS AND THEN EXIT
Environment.Exit(0);
}
else
{
App app = new App();
app.InitializeComponent();
app.Run();
}
}
Відповіді:
1 для відповіді № 1Я думаю, що є багато способів вирішити цю проблему.Так, ви відкрили другий екземпляр, але ми дозволяємо тільки один, так що проксі ваш запит до першої інстанції"проблема.
- Ви можете прослухати хост-процес на aсокет і коли мьютекс виявляє, що його вже був відкритий виклик у прослуховуючий сокет. Можливо, використовуйте щось настільки просте, як .NET remoting, ніякої реальної необхідності йти повним роздуванням WCF тут або сирим сокетом
- Ви також можете мати буфер спільної пам'яті і писати за допомогою спільної пам'яті. Але це вимагатиме синхронізації між двома процесами, так що це може бути дещо брудним
- Ви можете просто запустити файл і прослухати файл хоста у відомому місці. Це, напевно, найпростіше, найменш технологічне рішення
Це 3 ідеї, ймовірно, більше
Але, якщо ви просто хочете отримати інформацію про процес, чому не просто шукати процес ім'я?