2011-10-08 10 views
7

Windows 7 usa un mecanismo automático para detectar si una aplicación necesita privilegios de administrador elevados. O la aplicación en sí tiene un manifiesto.Averiguar si una aplicación necesita privilegios de administrador

¿Existe alguna manera de averiguar programáticamente si una aplicación específica necesita privilegios de administrador elevados o no? No quiero iniciarlo para descubrirlo.

Gracias;).

+1

No hay preferencias para sus títulos con "C#". En [así], para eso usamos etiquetas. –

+2

Bien, gracias por su corrección. Lo tendré en cuenta en otras preguntas;) – mmiccc

Respuesta

4

En realidad, hay una forma de decirle a Windows que un programa necesita ser elevado y eso es a través del archivo de manifiesto. Los archivos de manifiesto pueden estar incrustados dentro de un ensamblado (exe/dll) o pueden vivir en un archivo separado llamado <YOUR_APP>.exe.manifest. Esa es realmente la única forma y, probablemente, la única forma en que puede verificar con seguridad. Oficialmente.

Windows también contiene una base de datos gigante que se utiliza para la compatibilidad de aplicaciones. Si Microsoft ha probado una aplicación y ha descubierto que se rompe cuando ocurre una actualización del sistema operativo, a veces crean una entrada en la base de datos para esencialmente piratear la aplicación. A veces mienten sobre la versión actual del sistema operativo, a veces se ejecutan automáticamente como administrador, a veces hacen muchas otras cosas. Puede ver la base de datos usando el Application Compatibility Toolkit. No sé si hay una forma oficial de consultar la base de datos a través del código. This blog post habla de una herramienta que creó el blogger pero aparentemente nunca se lanzó.

El último mecanismo de elevación automática es un algoritmo que intenta determinar si esa aplicación es un instalador. According to MSDN estos atributos se comprueban:

  • nombre incluye palabras clave como "instalar", "configuración", "actualización", etc.
  • Las palabras clave en los siguientes campos de recursos de versiones: proveedor, el nombre de la empresa, nombre del producto , Descripción del archivo, Nombre de archivo original, Nombre interno y Nombre de exportación.
  • Palabras clave en el manifiesto lado a lado incrustado en el ejecutable.
  • Palabras clave en las entradas de StringTable específicas vinculadas en el ejecutable.
  • Atributos clave en los datos de RC vinculados en el ejecutable.
  • Secuencias de bytes identificadas dentro del ejecutable.

Las palabras clave y las secuencias de bytes se derivaron de las características comunes observadas a partir de diversas tecnologías de instalador.

Por último, una aplicación puede ejecutarse como un usuario normal pero spawn a child process that requires elevated privileges. No sé si realmente hay alguna manera de detectar eso sin descompilar la aplicación.

+0

¡Primero quiero agradecerles por esta larga y detallada respuesta! Bien, voy a implementar el último algoritmo indicado y buscar un archivo de manifiesto. Parece cubrir muchas situaciones. Muchas gracias :) – mmiccc

Cuestiones relacionadas