Ejecute ExeCommand en customAction como modo Administrador en el instalador Wix
installer impersonation (1)
Soy nuevo en el instalador wix. He desarrollado una configuración utilizando el instalador wix para mi aplicación y necesito ejecutar una acción personalizada para ejecutar un comando en cmd.exe. En XP funciona bien. Pero en Windows 8 y 7, el indicador de cmd debe ejecutarse como administrador.
He buscado en Google y he encontrado las palabras clave Privilegios elevados y suplantar me podría ayudar.
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"></Package>
Como puede ver arriba, usé el conjunto de atributos InstallScope para perMachine, y usé Impersonate = "No" en el elemento CustomAction:
<CustomAction Id=''comReg'' Directory=''INSTALLLOCATION'' Impersonate=''no''
ExeCommand=''"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll" /codebase'' Return=''check'' />
Pero no conseguí ningún cambio durante la instalación. Necesito la línea de comandos para abrir y ejecutar el comando anterior en el Modo Administrador.
Y, por favor, ¿puede alguien decirme sobre estas palabras clave " Privilegios elevados y personificar"
<InstallExecuteSequence>
<Custom Action=''comReg'' After=''InstallFinalize''>NOT REMOVE</Custom>
<Custom Action=''comUnreg'' Before=''RemoveFiles''>REMOVE</Custom>
</InstallExecuteSequence>
¿Cómo hacerlo?
La documentación wix aquí explica el atributo Impersonate:
Este atributo especifica si Windows Installer, que se ejecuta como LocalSystem, debe suplantar el contexto de usuario del usuario de instalación al ejecutar esta acción personalizada. Normalmente, el valor debe ser ''sí'', excepto cuando la acción personalizada necesita privilegios elevados para aplicar cambios a la máquina.
También debe comprender la diferencia entre acciones personalizadas diferidas e inmediatas. Vea el atributo Ejecutar en la misma página de ayuda:
Este atributo indica la programación de la acción personalizada. El valor de este atributo debe ser uno de los siguientes:
aplazado Indica que la acción personalizada se ejecuta en el script (posiblemente con privilegios elevados). inmediato Indica que la acción personalizada se ejecutará durante el tiempo de procesamiento normal con privilegios de usuario. Este es el valor predeterminado.
Actualmente, su acción personalizada es inmediata, lo que significa que se está ejecutando con privilegios de usuario. Vea esta publicación del blog para muchos detalles, pero particularmente:
Cualquier acción personalizada inmediata suplanta al usuario que invoca . Antes de Windows Vista, esto no era un problema, ya que en este punto el usuario administrativo de instalación tenía un token privilegiado. Con la introducción de UAC en Windows Vista, el token administrativo predeterminado con UAC habilitado es un token filtrado y no posee todos los privilegios. Dado que las acciones personalizadas inmediatas no deben modificar el estado de la máquina , solo para recopilar datos de estado y programar acciones personalizadas para ejecutar diferidas, esto todavía no debería ser un problema. Después de todo, en este punto, la generación de los scripts de instalación y restauración es todo lo que debería estar ocurriendo.
Nunca debe modificar el estado de la máquina con una acción personalizada inmediata. Use uno diferido y manténgase suplantado a no, y debería funcionar:
<CustomAction Id=''comReg'' Directory=''INSTALLLOCATION'' Execute=''deferred'' Impersonate=''no'' ExeCommand=''"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase'' Return=''check'' />
EDITAR : Programe la acción personalizada utilizando el elemento InstallExecuteSequence:
<InstallExecuteSequence>
<Custom Action=''comReg'' Before=''InstallFinalize''/>
</InstallExecuteSequence>