Tengo lo que las Guías de desarrollo de UAC denominan una "Solicitud de elección administrativa". Si está familiarizado con esto, salte a la siguiente sección.¿Cómo puedo copiar un archivo como "Usuario estándar" en Vista (es decir, "Una aplicación de elección administrativa") pidiendo al usuario las credenciales de administrador?
Antecedentes:
Quiero que un usuario "estándar" tienen la capacidad de seleccionar/anular la selección de una corrida en la opción de inicio en las preferencias de mi solicitud.
Como mi aplicación es por máquina (no por usuario), lo que debe suceder es que necesite Eliminar o Copiar un acceso directo al Menú de Inicio/Programas/carpeta de Inicio que requerirá acceso administrativo para realizar esta operación .
Entonces, lo que me gustaría es que aparezca el mensaje de "Credencial de control de cuentas de usuario" y, si el usuario tiene una cuenta de administrador, también pueden ingresar las credenciales. Al parecer, así se supone que las aplicaciones deben diseñarse para evitar que el usuario tenga que cambiar a otra cuenta cada vez que necesite hacer algo administrativo.
Extracto de la documentación de MSDN:
Un Administrativa Solicitud de Selección
Proceso Una elevada o de objetos COM
La aplicación inicial pone en marcha sin necesidad de elevación. Esos elementos en la interfaz de usuario que requerirían un token de acceso administrativo están decorados con un icono de escudo como identificación. Esta decoración indica al usuario que usar esa característica requerirá la aprobación del administrador. Cuando la aplicación detecta que uno de estos botones ha sido seleccionado, tiene las siguientes dos opciones.
- La aplicación inicia un segundo programa utilizando ShellExecute() para realizar la tarea administrativa. Este segundo programa se marcará con un nivel de ejecución requerido de requireAdministrator, lo que provocará que se solicite la aprobación del usuario. Este segundo programa se estaría ejecutando con un token de acceso administrativo completo y podría realizar la tarea deseada. -O-
- La aplicación inicia un objeto COM utilizando CreateElevatedComObject(). Esta API lanzaría el objeto COM con un token de acceso administrativo completo luego de la aprobación y este objeto COM podría realizar la tarea deseada.
Solo necesito copiar un archivo ... parece excesivo bifurcar un nuevo proceso usando ShellExecute() y no sé lo suficiente acerca de COM para saber si podría usarlo para copiar un archivo. Espero que alguien pueda publicar algún código que proporcione una forma de copiar el archivo y, de manera ideal, también explicar cómo decorar un MenuItem con el "decorador de elementos decorativos".
Notas:
He mirado en la UAC Demo provided by microsoft que se hace referencia en varios puestos StackOverflow tales como (Request Windows Vista UAC elevation if path is protected?) sobre temas relacionados con los permisos. El código solo tiene un ejemplo de la llamada a un proceso separado.
Es un comienzo. ¡Gracias! – blak3r