/// <summary> /// Tentar fechar o ponteiro do processo que está usando o item /// </summary> /// <param name="item">Item</param> /// <returns>null em caso de sucesso; string de erro caso contrário</returns> public string CloseHandle(HandleProcessItem item) { string args = $"-c {item.Address} -p {item.Pid} -y -nobanner"; string output, outputerror; int resultado = CommandClass.ExecuteCommand(Constantes.HandlePath, args, out output, out outputerror, Path.GetDirectoryName(Constantes.HandlePath)); if (resultado == 0) { int index = output.IndexOf(PatternErrorClosingHandle, StringComparison.CurrentCultureIgnoreCase); if (index >= 0) { string msg = output.Substring(index + PatternErrorClosingHandle.Length).Trim(); if ((msg.IndexOf(IdentificadorInvalido, StringComparison.CurrentCultureIgnoreCase) >= 0) || (msg.IndexOf(InvalidIdentifier, StringComparison.CurrentCultureIgnoreCase) >= 0)) { msg += Environment.NewLine + "Tente executar com privilégios de administrador."; } return(msg); } } else { return(output + " " + outputerror); } return(null); }
private void menuItemFinalizarProcessosMarcados_Click(object sender, EventArgs e) { const string msg = @"ATENÇÃO!!! Esta opção irá fechar (taskkill) os TODOS os processos marcados. Todos os processos que têm o mesmo nome serão finalizados. Confirma esta opção?"; if (MessageBox.Show(msg, "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { IEnumerable <string> lstHandle = ListaHandleGrid.GroupBy(x => x.ProcessName).Select(x => x.Key); foreach (var item in lstHandle) { string args = $"/im {item}"; string output, outputerror; int resultado = CommandClass.ExecuteCommand("taskkill", args, out output, out outputerror, Path.GetDirectoryName(Constantes.HandlePath)); MessageBox.Show(output, "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
/// <summary> /// Verificar se o item está sendo usado por algum processo /// </summary> /// <param name="item">Item a ser verificado. Pode ser uma pasta ou um arquivo</param> /// <returns>Lista de uso; lista vazia se o item não está em uso</returns> /// <exception cref="Exception">Erro ao verficar uso do item</exception> public List <HandleProcessItem> GetHandles(string item) { string output, outputError; int exitCode = CommandClass.ExecuteCommand(FileName, "-a -u -accepteula -nobanner \"" + item + "\"", out output, out outputError, Path.GetDirectoryName(FileName)); if (exitCode == 0) { if (output.IndexOf(PatternNoMatchingFound, StringComparison.CurrentCultureIgnoreCase) >= 0) { return(new List <HandleProcessItem>()); } else { List <HandleProcessItem> lstProcessos = HandleProcessItem.ParseOutput(output); return(lstProcessos); } } else { throw new Exception(outputError); } }