c# windows-installer uac custom-action

c# - Marque MSI, por lo que debe ejecutarse como una cuenta de administrador elevada



windows-installer uac (2)

requireAdministrator en el manifiesto debería funcionar.

También puede usar un archivo .exe de cargador de arranque que puede usar ShellExecute con "RUNAS" como el verbo (puede usar 7-zip para crear el gestor de arranque, o hay muchas otras formas).

Tengo una CustomAction como parte de una MSI.

DEBE ejecutarse como una cuenta de dominio que también es miembro de la cuenta local de administradores.

No puede usar el indicador NoImpersonate para ejecutar la acción personalizada como NT Authority / System ya que no tendrá acceso a los recursos de la red.

En Vista / 2008 con UAC habilitado si NoImpersonate está desactivado, se ejecutará como usuario en ejecución pero con el token sin privilegios y no tendrá acceso a recursos locales como .installState. Ver arquitectura UAC

Alguien sabe de una manera de cualquiera

  • ¿Forzar el MSI para que se ejecute con el token elevado de la misma manera que lo hace ejecutar desde un símbolo del sistema elevado?

  • Forzar la CustomAction para ejecutar elevado (requireAdministrator en manifiesto no parece funcionar)?

  • ¿Se resuelve si el UAC está habilitado y si no se ha ejecutado elevado y, de ser así, avisa o cancela la instalación?


Respondiendo mi propia pregunta para cualquier otro pobre que mire esto.

  • No puede agregar un manifiesto a una MSI. Podría agregar SETUP.EXE o bootstrapper para crear el MSI y manifestarlo con requireAdministrator, pero eso frustraría el uso de una MSI.

  • Agregar un manifiesto a CustomAction no funciona, ya que se ejecuta desde msiexec.exe

La forma en que lo he abordado es establecer la propiedad MSIUSEREALADMINDETECTION en 1 para que la condición Privileged realmente funcione y agregar una condición de inicio para Privileged que da un mensaje de error sobre la ejecución a través de un símbolo del sistema elevado y luego sale de la instalación.

Esto tiene el feliz efecto secundario: cuando se ejecuta un msi desde un símbolo del sistema elevado, las CustomActions diferidas se ejecutan como el usuario actual con un token de administrador completo (en lugar del token de usuario estándar) independientemente de la configuración NoIperrsonate .

Más detalles: http://www.microsoft.com/downloads/details.aspx?FamilyID=2cd92e43-6cda-478a-9e3b-4f831e899433

[Editar] - He puesto el script aquí que le permite agregar la propiedad MSIUSEREALADMINDETECTION ya que VS no tiene capacidad para hacerlo y Orca es un problema.