o que deve ser feito se o código acima retornar Exceção (um processo de 32 bits não pode acessar os módulos de um processo de 64 bits)?
Manish
40
Pare com ".exe". De MSDN: "O nome do processo é um nome amigável para o processo, como o Outlook, que não inclui a extensão .exe ou o caminho"
1
O @AgainMe Process.Kill () envia um sinal de interrupção para um processo, que interromperá sua execução onde quer que esteja. Isso é diferente de um sinal de interrupção, pois o processo não terá chance de responder e / ou limpar o sinal. Não haverá mais execução nesse processo, e quaisquer bloqueios nos recursos usados por esse processo serão liberados. Environment.Exit () é executado pelo processo atualmente em execução para se matar com um código de sucesso, o que é perfeitamente seguro. Process.Kill () não é tão seguro quanto Environment.Exit ().
jchitel
2
Sugiro o uso de LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro
2
Alguma opção para matar uma instância específica de um processo? Quero dizer, Contains("Spotify"))mata todas as instâncias de Spotify. Eu quero matar uma instância específica de Spotify.
Banee Ishaque K
38
Minha solução é usar Process.GetProcess () para listar todos os processos.
Ao filtrá-los para conter os processos desejados, posso executar o método Process.Kill () para interrompê-los:
var chromeDriverProcesses =Process.GetProcesses().Where(pr => pr.ProcessName=="chromedriver");// without '.exe'foreach(var process in chromeDriverProcesses){
process.Kill();}
Atualizar:
Caso queira usar a asyncabordagem com alguns métodos recentes úteis do C# 8( Async Enumerables ), verifique isso:
conststring processName ="chromedriver";// without '.exe'awaitProcess.GetProcesses().Where(pr => pr.ProcessName== processName).ToAsyncEnumerable().ForEachAsync(p => p.Kill());
Nota: o uso de asyncmétodos nem sempre significa que o código será executado mais rapidamente, mas pelo menos não desperdiçará o tempo da CPU e impedirá que o encadeamento em primeiro plano seja interrompido durante as operações. De qualquer forma, você precisa pensar sobre a versão que deseja.
Engraçado coincidência é que eu estava procurando neste tópico uma solução para matar o cromedriver. Deve ser um problema comum.
kerl
O mesmo aqui. isso não parece resolver o problema. O console inicial que é demitido off é na verdade uma instância de chrome.exe e eu estou supondo que você não quer forçar perto todos aqueles a menos que seu um agente de compilação / test
Você pode matar uma instância específica do MS Word.
foreach(var process inProcess.GetProcessesByName("WINWORD")){// Temp is a document which you need to kill.if(process.MainWindowTitle.Contains("Temp"))
process.Kill();}
uma simples .Replace(".exe", "")no topo votou resposta seria fazer isso com o código muito menos complicado e desnecessário
AndrewK
Toda a idéia de que é ver o método com ou sem .exe que as pessoas possam ver várias maneiras de lidar com isso ... Não é significou para copiar e colar ....
Respostas:
Resposta rápida:
(deixe de fora .exe do nome do processo)
fonte
Contains("Spotify"))
mata todas as instâncias deSpotify
. Eu quero matar uma instância específica deSpotify
.Minha solução é usar Process.GetProcess () para listar todos os processos.
Ao filtrá-los para conter os processos desejados, posso executar o método Process.Kill () para interrompê-los:
Atualizar:
Caso queira usar a
async
abordagem com alguns métodos recentes úteis doC# 8
( Async Enumerables ), verifique isso:fonte
Você pode usar
Process.GetProcesses()
para obter os processos atualmente em execução e depoisProcess.Kill()
matar um processo.fonte
Se você possui o ID do processo (
PID
), pode matar esse processo da seguinte maneira:fonte
Você pode matar uma instância específica do MS Word.
fonte
Resumo : não importa se o nome contém .exe, o processo será encerrado. Você não precisa "excluir .exe do nome do processo", ele funciona 100%.
fonte
.Replace(".exe", "")
no topo votou resposta seria fazer isso com o código muito menos complicado e desnecessário