2009-12-10 20 views
5

Tengo una aplicación WinForms en la que estoy trabajando. Hay una pequeña funcionalidad que debe ejecutarse como administrador en Vista/Win7. Entiendo cómo puedo configurar requiredExecutionLevel para la aplicación en el manifiesto. El truco es que no quiero exigir al usuario que ejecute toda la aplicación como administrador, solo una parte de ella. Así que me gustaría tener la mayor parte de la funcionalidad ejecutada como Invoker.Nivel de ejecución solicitado para un dll

Si pongo la funcionalidad de administrador en un dll, ¿hay alguna manera de marcarlo como requireAdministrator? Traté de usar MT para agregar un manifiesto a la DLL, pero eso no pareció funcionar. ¿Que necesito hacer?

Respuesta

4

No, no hay forma de diferenciar el nivel de ejecución de una aplicación en una DLL por DLL. Esta es una configuración de todo el proceso. Tendría que invocar otro proceso dentro de su aplicación que ejecute el código en esa DLL con privs elevados.

Una opción que sí tiene es usar el programa rundll o rundll32 para ejecutar el DLL directamente. Este es un programa de Windows independiente diseñado para cargar y ejecutar una DLL particular. Podrías elevar el proceso de rundll y obtener el aislamiento que deseas.

Googling para rundll le dará muchos consejos sobre cómo usarlo :).

+0

¿Se puede ejecutar una DLL como si fuera su propio proceso o tiene que iniciarse desde un EXE? – epotter

+0

@epotter Actualicé mi respuesta un poco sobre este tema. – JaredPar

3

La elevación es por proceso, por lo que no puede tener un DLL elevado por sí mismo. Debe considerar alojar el archivo DLL en un proceso separado y elevado; o puedes mirar el moniker COM de elevación y hacerlo de esa manera.

Cuestiones relacionadas