Pregunta

Tengo una CustomAction como parte de un MSI.

DEBE ejecutarse como una cuenta de dominio que también sea miembro de la cuenta de administradores locales.

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 el usuario ejecutor pero con el token sin privilegios y no tendrá acceso a recursos locales como .installState. Ver arquitectura de UAC

Alguien sabe de una manera de cualquiera

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

  • ¿Forzar que CustomAction se ejecute de forma elevada (requireAdministrator en manifiesto no parece funcionar)?

  • ¿Resolver si UAC está habilitado y si no se ha ejecutado elevado y si es así, advertir o cancelar la instalación?

¿Fue útil?

Solución

Respondiendo mi propia pregunta para cualquier otro pobre s0d mirando esto.

  • No puede agregar un manifiesto a un MSI. Puede agregar un SETUP.EXE o bootstrapper para shell del MSI y manifestarlo con requireAdministrator pero eso invalida parte del uso de un MSI.

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

La forma en que lo he abordado es configurar el Propiedad MSIUSEREALADMINDETECTION a 1 para que la condición privilegiada realmente funcione y agregue una condición de lanzamiento para Privilegiado que muestra un mensaje de error acerca de la ejecución a través de un símbolo del sistema elevado y luego cierra la instalación.

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

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

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

Otros consejos

requireAdministrator en el manifiesto debería funcionar.

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

Puede crear un archivo simple sfx para msi con Winrar y estas opciones:

  • Pestaña de configuración > Ejecutar después de la entrada de ejecución : su nombre de archivo msi

  • Pestaña Avanzada > Marque la casilla de verificación Solicitar acceso administrativo opción

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top