Pregunta

Tenemos una aplicación escrita en C ++ y .NET que se instala para todos los usuarios en la carpeta Archivos de programa. Esta aplicación descarga nuevas versiones de sí mismo (como instaladores MSI) y desova el nuevo proceso de instalación para reemplazar a sí mismo.

El proceso de instalación, tal como existe hoy en día:

  1. Copiar un gestor de instalación de aplicaciones (C #, .NET 2.0) en el directorio temporal. Llamar a este 'Administrador'
  2. Administrador se ejecuta con elevada privs por este artículo .
  3. Las salidas de solicitud original.
  4. desova Administrador del instalador MSI (con privs elevadas, ya que se eleva la copia)
  5. desova Administrador de la nueva versión de la aplicación.

El error:

La aplicación recién instalada está funcionando en un estado elevado. Esto causa problemas no voy a enumerar aquí.

Lo ideal sería que el lanzamiento de la aplicación recién instalada se ejecuta con los permisos del usuario original.

No se puede encontrar la manera de degradar la parte posterior aplicación a ser el usuario estándar después de la elevación.

Un poco elegante:

(sí, sí, todo este proceso es de todos modos poco elegante)

  1. Copiar el gestor de instalación en el directorio temp
  2. Ejecutar el gestor de instalación con privs de usuario estándar. Vamos a llamar a esta instancia 'LowlyManager'.
  3. sale de la aplicación original.
  4. desova LowlyManager la aplicación nuevo , esta vez con privs elevados. El nombre de esta instancia Let 'UpperManagement'
  5. desova UpperManagement el instalador
  6. UpperManagement sale con gracia, devolviendo el código de salida del instalador.
  7. LowlyManager interpreta el código de error de UpperManagement, y desova la aplicación recién instalada. Esta vez como el invocador originales.

¿Hay una mejor manera de hacer esto?

(He dejado de lado un montón de otros detalles antes y después de estos pasos que componen el proceso más suave para el usuario, pero esto debería ser suficiente para entender el núcleo del problema que estoy tratando de resolver.)

Otros requisitos:

  • No se puede instalar como una aplicación por usuario
  • El usuario no debe ser presentada con un cuadro de diálogo de autenticación si UAC simplemente habría preguntado "¿está seguro de que desea permitir esto?". Creo que esto podría matar a una solución utilizando WindowsImpersonationContext, pero no estoy seguro.
  • Las necesidades del sistema para trabajar en XP, Vista y Windows 7 (incluso si no es un proceso independiente para XP).
¿Fue útil?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top