там множество разных примеров, плавающих вокруг SO, с использованием mutex
, Environment.Exit(0)
(консольное приложение), Application.Exit()
(Win формы) и лот, в котором говорится, что не использовать process.kill()
.Правильный способ закрыть дополнительные экземпляры процесса?
Может ли кто-нибудь объяснить политическую неточность того, как я закрываю ДРУГИЕ экземпляры моего заявления. Это приложение для окон. Это, кажется, отлично работает в моей локальной среде, но я боюсь, что есть некоторые серьезные проблемы, о которых я не знаю.
// I get the current process name and ID
string currentProcName = Process.GetCurrentProcess().ProcessName;
int currentProcID = Process.GetCurrentProcess().Id;
// I then get a list of all process running under this name
Process[] currentProcess = Process.GetProcessesByName(currentProcName);
foreach (Process proc in currentProcess)
{
// if the found process id is using the same name, but not this current id, kill it.
if (proc.Id != currentProcID)
{
proc.Kill(); // Documentation says it imediatly stops the associated process.
proc.Close(); // Documentation says that it frees all resources associated with this component
}
}
Согласно документации, я думаю, что это разумный способ закрыть ДРУГИЕ экземпляры запущенного приложения. Могли бы некоторые более опытные указать на некоторые проблемы, если они есть? Помимо атомарности, как я добавлю в обработку исключений.
Ну, часть этого сводится к пониманию того, что делает другой процесс, и если это возможно или, вероятно, окажется посреди чего-то, что нужно закончить. Вот почему нехорошо предлагать решения, подобные этому, широкой аудитории как * * решение. Если вы знаете, что в вашем случае нет постоянных данных, оставшихся в несогласованном состоянии или что-либо в этих строках, это возможно *, что это приемлемо в ваших обстоятельствах. – Servy
Целью этого является запуск одного экземпляра приложения? При каких условиях вы хотите убить другие сестринские процессы? –
Благодарим за разрешение Servy. @JohnArlen Я создаю aC# исполняемый файл для неуправляемого собственного приложения, и я хотел бы разрешить родному приложению запускать программу в режиме отладки или в режиме запуска (один показывает интерфейс программы, другой скрывает все), вызывая exe из на родном языке, передавая ему аргумент команды «Debug» или «Run». Этот сценарий возникает, когда я хочу убить предыдущую версию приложения форм выигрышей, открыв другой экземпляр. Он отлично работает на моей тестовой среде, но мы все знаем, что это может измениться! – clamchoda