2011-10-24 12 views
6

Tengo un problema importante con mi aplicación. Tengo una aplicación de actualización & como un archivo EXE por separado. Cuando hay una actualización disponible, el actualizador realiza la actualización y, al finalizar el proceso, inicia mi aplicación. El principal problema es que la aplicación está instalada en la carpeta de archivos de programa, por lo que el actualizador necesita privilegios de administrador de UAC, y eso está bien, pero cuando necesito ejecutar mi aplicación, el actualizador necesita ejecutarlo como un usuario normal, porque si se ejecuta como administrador arrastre y drop no funciona (no es un problema de la aplicación, UAC lo bloquea). He intentado varias soluciones diferentes, e incluso ésta: How to run NOT elevated in Vista (.NET)proceso de inicio de C# con privilegios reducidos del proceso de nivel de administrador de UAC

No me ha ayudado, mi aplicación se ejecuta como administrador.

Respuesta

9

Será mejor que evite iniciar un proceso no elevado desde uno elevado. Es una parte difícil y propensa a errores.

Este enfoque es mejor:

  1. Su actualizador inicia por primera vez como una aplicación no elevados, y su manifiesto tiene asInvoker nivel.
  2. Cuando se inicia, se reinicia con privilegios elevados usando el verbo runas, y pasa un parámetro de línea de comandos para indicarlo. Esta instancia realiza la actualización y regresa.
  3. Aquí viene el actualizador no elevada de nuevo, y se inicia la aplicación con la misma razón no elevados de usuario que inició la primera instancia del actualizador en el paso 1.

Bastante simple y robusto.

+0

+1; La primera línea de esta respuesta es bastante importante. He leído artículos que decían que era una mala idea intentar des-elevar (obtener un símbolo des-elevado para suplantar), sin importar la técnica que intentas. No estoy seguro de dónde encontrar ese o esos artículos desde que lo leí cuando salió Vista por primera vez. Otra opción se da en esta pregunta: http://stackoverflow.com/questions/1173630/how-do-you-de-elevate-privileges-for-a-child-process –

+0

Lo intentaré así, gracias por su responder. :) – n1tr0

+0

Hecho de esta manera - funciona como un encanto! ¡Muchas gracias mi amigo! ;) – n1tr0

Cuestiones relacionadas