Exemplo n.º 1
0
        /// <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);
                }
            }
        }
Exemplo n.º 3
0
        /// <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);
            }
        }