Estoy tratando de conseguir el proceso de ruta por pid, pero me estoy poniendo Win32Exception (identificación de acceso denegado).

El código se parece a esto:

string path = Process.GetProcessById(pid).MainModule.FileName

He intentado usar OpenProcess con GetModuleFileNameEx pero OpenProcess se devuelve 0. Incluso he intentado habilitar SeDebugPrivilege según C# – Cómo habilitar SeDebugPrivilege pero no ayuda.

El código anterior funciona para la mayoría de los procesos, pero tira error SynTPHelper.exe (Synaptics Pointing Device Helper) La aplicación se está ejecutando bajo el mismo nombre de usuario como mi código. Ambos, mi aplicación y el proceso de ejecución de 64 bits.

Es posible recuperar el camino sin ejecutar mi aplicación como administrador?

Editar

El Administrador de tareas es capaz de «abrir ubicación del archivo» aunque no estoy ejecutando como administrador.

OriginalEl autor Giorgi | 2010-08-03

2 Comentarios

  1. 14

    Finalmente me las arreglé para resolver. Resultó que hay una nueva función en la Vista y superior para la obtención de proceso de la ruta de acceso y el nuevo proceso de acceso (PROCESS_QUERY_LIMITED_INFORMATION):

    QueryFullProcessImageName

    Aquí está el código que funciona a partir de la no-elevada proceso:

        private static string GetExecutablePathAboveVista(UIntPtr dwProcessId)
        {
            StringBuilder buffer = new StringBuilder(1024);
            IntPtr hprocess = OpenProcess(ProcessAccessFlags.PROCESS_QUERY_LIMITED_INFORMATION, false, dwProcessId);
            if (hprocess != IntPtr.Zero)
            {
                try
                {
                    int size = buffer.Capacity;
                    if (QueryFullProcessImageName(hprocess, 0, buff, out size))
                    {
                        return buffer.ToString();
                    }
                }
                finally
                {
                    CloseHandle(hprocess);
                }
            }
            return string.Empty;
        }
    Muchas gracias por aboutmycode.com/net-framework/… (que es el mismo Giorgi?). Copia Simple/Pasado/Formatear/Agregar algunos espacios de nombres y funciona!!! 🙂
    Sí, esa es solo mi blog.
    PROCESS_QUERY_LIMITED_INFORMATION = 0x1000; msdn.microsoft.com/en-us/library/windows/desktop/…
    Por favor, ¿cómo puedo ProcessAccessFlags, mi proyecto no puede resolver.
    Este parece que funciona (tiene que cambiar el nombre PROCESS_QUERY_LIMITED_INFORMATION).

    OriginalEl autor Giorgi

  2. 1

    Bueno, ciertamente no es desconocida para los servicios de eliminar los derechos de acceso, de modo que incluso un administrador no puede abrir el proceso. Un servicio tiene suficientes privilegios para ello, los componentes de DRM como audiodg.exe fácilmente hacerlo. Una alfombrilla de ratón helper no me parecen algo que requeriría dicha protección. Pero lo que el oye, ¿por qué a nadie que haya necesidad de meterse con una alfombrilla de ratón ayudante?

    No estoy tratando de meterse con él, solo quiero obtener la lista de procesos con el camino que se ejecuta bajo el usuario actual.
    Ponerse en contacto con Synaptics para el apoyo. Estar preparado para el ¿por Qué? pregunta.
    audiodg.exe es también un proceso protegido IIRC por lo que se pone de protección como que es gratis
    consiguió trabajo. Ver mi respuesta para más detalles.

    OriginalEl autor Hans Passant

Dejar respuesta

Please enter your comment!
Please enter your name here