var current = Process.GetCurrentProcess();
Process.GetProcessesByName(current.ProcessName)
.Where(p => p.Id != current.Id)
.ToList()
.ForEach(p => p.Kill());
current.Kill();
הסבר בקצרה:
- קבלת התהליך הנוכחי.
- קבלת כל התהליכים הפעילים החולקים את שמם עם התהליך הנוכחי (מלבד התהליך הנוכחי עצמו - אנו זקוקים לשמר אותו בחיים בשלב זה).
- סגירת כל התהליכים שבתוצאה.
- סגירת התהליך הנוכחי.
מומלץ להעדיף את השימוש בProcess.CloseMainWindow (המבקש מהתהליך בצורה מנומסת לסיים [Graceful exit]) על פני השימוש בProcess.Kill (המסיים את התהליך מייד, מה שעלול לגרום לתופעות שאינן רצויות) אם כי לא תמיד השימוש בו אפשרי, אולם תמיד ניתן להשתמש בProcess.Kill כFallback במקרה של כישלון:
if (!p.CloseMainWindow()) p.Kill();
קרדיט: Exit all instances of my app
** דוטנט מציעה מספר מחלקות טיימר (כדוגמת system.timers וsystem.threading.timer)