Мое приложение проверяет при запуске, если какой-либо другой экземпляр его уже запущен, если да, то он закроет все остальные экземпляры. Для этого я попытался использовать функцию Process.GetProcessByName («AppName») и сохранить весь процесс с AppName в массивах процессов []. Теперь я хочу найти PID текущего экземпляра, чтобы я мог закрыть все другие экземпляры моего приложения (которые, очевидно, имеют одинаковое имя, но разные PID). Но я не могу найти это даже после многоголоджинга. Также как я могу найти PID экземпляра моего приложения, которое я создал с помощью функции Process.Start («AppName.exe») изнутри AppName.exeКак получить PID моего приложения во время выполнения с помощью C#
ответ
ОК, учитывая проблемы с моим другим решением, видим следующее
Для того, чтобы подключить между процессами, вам потребуется некоторая форма IPC. Чтобы использовать упрощенность общих ручек между EventWaitHandles, вы можете заставить каждую программу прослушивать флаг отмены.
public static EventWaitHAndle CancellationEvent =
new EventWaitHandle(
false,
EventResetMode.AutoReset,
"MyAppCancel");
private object lockObject = new object();
А потом ...
Task.Run(() =>
{
while(true)
{
CancellationEvent.WaitOne();
lock(lockObject)
if(!thisIsCalling) // static bool to prevent this program from ending itself
Environment.Exit(0);
}
}
И затем вызвать отмену как так
lock(lockObject)
{
thisIsCalling = true;
CancellationEvent.Set();
thisIsCalling = false;
}
Спасибо. Кажется, он работает нормально. Приветствия. :) – Sanyam
Почему бы вам просто не проверить равенство с вашим текущим обработать?
var processes = Process.GetProcessByName("AppName");
foreach (var p in processes)
{
if (p != Process.GetCurrentProcess())
p.CloseMainWindow();
}
Если вы заинтересованы в закрытии других экземпляров своего приложения, почему бы не сделать наоборот и предотвратить открытие нескольких экземпляров в первую очередь? Использование EventWaitHandle может сделать это таким образом:
bool created;
var eve = new System.Threading.EventWaitHandle(
false,
EventResetMode.AutoReset,
"MyAppHandle",
out created);
if(!created)
{
eve.Set();
Environment.Exit(-1); // Always use an exit error code if you're expecting to call from the console!
}
Параметр ручка, «MyAppHandle» в этом случае, будут распределены по всей системе, таким образом, имея в виду не только будет out created
paramete ложным на вторичных instaces, но вы можете используйте eve.Set()
, чтобы заставить ручку запускать приложение acorss. Настройте прослушивающий поток, и это может позволить контуру сообщения отображать сообщение при попытке открыть второй экземпляр.
Task.Run(() =>
{
while(true)
{
eve.WaitOne();
// Display an error here
}
}
Спасибо Aravol. Но другой экземпляр моего приложения работает в какой-то другой цели одновременно. Поэтому мне нужны и другие экземпляры, но в какой-то момент я должен их закрыть (когда их работа с связанными файлами завершена). – Sanyam
В этом случае это бесполезно! Тем не менее, вы смотрите на аналогичный IPC, поэтому позвольте мне дать вам еще один ответ ~ – David
- 1. Как получить PID родительского процесса моего приложения
- 2. Как проверить иерархию наследования моего приложения C# во время выполнения?
- 3. Как обновить индикатор выполнения во время выполнения с помощью C#
- 4. Получите и установите идентификатор моего приложения во время выполнения
- 5. Как я могу получить время выполнения моего приложения?
- 6. Как изменить шрифт приложения во время выполнения?
- 7. Как получить PID запущенного приложения в C#
- 8. Как получить режим рендеринга любого приложения iOS во время выполнения
- 9. Как получить реальный путь Java-приложения во время выполнения?
- 10. Получить PID во время процесса в ruby
- 11. Определить собственный андроид моего приложения: versionCode во время выполнения
- 12. Как переопределить logging.properties во время выполнения приложения?
- 13. Получить отображение камеры во время выполнения C
- 14. Как получить динамический путь во время выполнения?
- 15. PhoneGap Сбоев приложения во время выполнения
- 16. Как получить план запроса во время выполнения
- 17. C# Отражение во время выполнения
- 18. android - как получить общее использование памяти приложения во время выполнения?
- 19. C++ devirtualization во время выполнения?
- 20. Как получить время выполнения с помощью msp430?
- 21. Получить PID исполняемого приложения
- 22. Препроцессор C во время выполнения?
- 23. Как получить состояние выполнения моего приложения?
- 24. Как получить доступные классы во время выполнения
- 25. Изменение значка приложения во время выполнения
- 26. Как изменить заголовок моего Eclipse RCP во время выполнения?
- 27. Изменение значка приложения во время выполнения
- 28. C++ компиляция во время выполнения
- 29. Получение пути приложения во время выполнения + какао
- 30. C# Создание объектов с помощью Generics во время выполнения
возможно дубликат [Получение PID процесса, созданного в C#] (HTTP://stackoverflow.com/questions/2539920/getting-a-pid-of-a-process-created-in-c-sharp) – Chris