none
Kill Classe Process não funciona depois do publish em qualquer modo (Debug ou Release) RRS feed

  • Pergunta

  • Estou chamando o teclado virtual que o windows utiliza, tenho o .exe salvo no meu resource e caso o computador não tenha eu o reescrevo no caminho da aplicação e executo mantendo em uma classe estática.

        public static class TecladoVirtual
        {
            public static Process p { get; set; }
        }

    Bom até ai tudo funcionando perfeitamente, consigo executar o teclado no momento que já é iniciado a aplicação. O meu problema está no momento de da um Kill nesse processo, pois em modo de desenvolvimento funciona perfeitamente assim:

            private void btnTecladoVirtual_Click(object sender, EventArgs e)
            {
                if (TecladoVirtual.p.HasExited)
                {
                    TecladoVirtual.p = Process.Start(strTeclado);
                }
                else
                {
                    TecladoVirtual.p.Kill();               
                }
            }

    Só que depois que eu efetuo o publish simples da aplicação para gerar o executável para testar, o processo não é finalizado sempre mantendo um estado de true.

    Alguma ideia?

     

    Atenciosamente, Samuel dos Anjos

    terça-feira, 26 de fevereiro de 2013 18:08

Todas as Respostas

  • Apenas como observação, estou efetuando testes com outros processos(notepad, etc...) e os mesmos não são finalizados também. Instalo e executo como administrador o que eu publiquei e até agora sem sucesso.

    Fiz até na raça para matar o processo que quero e mesmo assim nada:

                Process[] pProcesso = Process.GetProcessesByName("osk");
    
                for (int i = 0; i < pProcesso.Length; i++)
                {
                    if (pProcesso[i].ProcessName.Contains("osk"))
                    {
                        pProcesso[i].Kill();
                        pProcesso[i].Refresh();
                    }
                } 
    
    //ou trabalhando até mesmo com API do windows
    
            [DllImport("kernel32.dll", SetLastError = true)]
            static public extern bool CloseHandle(IntPtr hHandle);
    
            [DllImport("kernel32.dll")]
            static public extern bool Module32First(ToolHelpHandle hSnapshot, ref MODULEENTRY32 lpme);
    
            [DllImport("kernel32.dll")]
            static public extern bool Module32Next(ToolHelpHandle hSnapshot, ref MODULEENTRY32 lpme);
    
            [DllImport("kernel32.dll")]
            static public extern bool Process32First(ToolHelpHandle hSnapshot, ref PROCESSENTRY32 lppe);
    
            [DllImport("kernel32.dll")]
            static public extern bool Process32Next(ToolHelpHandle hSnapshot, ref PROCESSENTRY32 lppe);
    
            [DllImport("kernel32.dll", SetLastError = true)]
            static public extern ToolHelpHandle CreateToolhelp32Snapshot(SnapshotFlags dwFlags, uint th32ProcessID);
    
            public const short INVALID_HANDLE_VALUE = -1;
    
            [Flags]
            public enum SnapshotFlags : uint
            {
                HeapList = 0x00000001,
                Process = 0x00000002,
                Thread = 0x00000004,
                Module = 0x00000008,
                Module32 = 0x00000010,
                Inherit = 0x80000000,
                All = 0x0000001F
            }
    
            [StructLayoutAttribute(LayoutKind.Sequential)]
            public struct PROCESSENTRY32
            {
                public uint dwSize;
                public uint cntUsage;
                public uint th32ProcessID;
                public IntPtr th32DefaultHeapID;
                public uint th32ModuleID;
                public uint cntThreads;
                public uint th32ParentProcessID;
                public int pcPriClassBase;
                public uint dwFlags;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
                public string szExeFile;
            };
    
            [StructLayoutAttribute(LayoutKind.Sequential)]
            public struct MODULEENTRY32
            {
                public uint dwSize;
                public uint th32ModuleID;
                public uint th32ProcessID;
                public uint GlblcntUsage;
                public uint ProccntUsage;
                IntPtr modBaseAddr;
                public uint modBaseSize;
                IntPtr hModule;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
                public string szModule;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
                public string szExePath;
            };
    

    Lembrando que só estou tendo esse problema depois que publico a minha aplicação Windows Forms.

    Vou continuar procurando soluções.

    Atenciosamente,

    Samuel dos Anjos


    terça-feira, 26 de fevereiro de 2013 23:11