Ejecutar ExeCommand en customAction como modo de Administrador en Wix Instalador

Soy nuevo en wix instalador. He desarrollado un set-up usando wix instalador para mi aplicación y me necesita para ejecutar una Acción Personalizada para ejecutar un comando en cmd.exe. En XP funciona bien. Pero en Windows 8 & 7 la consola cmd necesita ser ejecutado como administrador.

Que he buscado en google y encontró las palabras clave Privilegios Elevados y suplantar me podría ayudar.

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"   InstallPrivileges="elevated"></Package>

Como se puede ver arriba, yo la InstallScope conjunto de atributos a perMachine, y he utilizado 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 me dieron los cambios, mientras que installating. Necesito el símbolo del sistema para abrir y ejecutar el comando anterior en el Modo de Administrador.

Y puede alguien por favor decirme acerca de estas palabras clave «Privilegios Elevados & suplantar»

<InstallExecuteSequence>
  <Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom>
  <Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom>
</InstallExecuteSequence>

Cómo hacerlo?

OriginalEl autor Arshad | 2014-06-30

1 Kommentar

  1. 32

    La wix documentación aquí explica el atributo de suplantación:

    Este atributo especifica si el Instalador de Windows, que se ejecuta como LocalSystem, debe suplantar el contexto de usuario de la instalación de usuario cuando se ejecuta esta acción personalizada. Normalmente, el valor debe ser «sí», excepto cuando la acción personalizada de las necesidades de elevación de privilegios para aplicar los cambios a la máquina.

    También es necesario entender la diferencia entre diferida e inmediata de acciones personalizadas. Ver la Ejecución de atributo en la misma página de ayuda:

    Este atributo indica la programación de la acción personalizada. Este valor del atributo debe ser uno de los siguientes:

    diferido
    Indica que la acción personalizada se ejecuta en secuencia de comandos (posiblemente con privilegios elevados).
    inmediata
    Indica que la acción personalizada se ejecutará durante el tiempo normal de procesamiento con privilegios de usuario. Este es el valor predeterminado.

    En la actualidad personalizado acción es inmediata, lo que significa que se está ejecutando con privilegios de usuario. Ver este blog para un montón de detalles, pero en particular:

    Inmediatamente las acciones personalizadas suplantar a la invocación de usuario. Antes de Windows Vista, esto no fue un problema, ya que en este punto de la instalación administrativa de usuario tenía un token de privilegios. Con la introducción de la UAC en Windows Vista predeterminada token administrativo con UAC activado es un token filtrado y no tienen todos los privilegios. Desde inmediata acciones personalizadas no se supone que para modificar el estado de la máquina – sólo para recopilar datos de estado y programación de acciones personalizadas para ejecutar diferido – esto todavía no debería ser un problema. Después de todo, en este punto la generación de la instalación y desinstalación de los scripts es todo lo que debería estar pasando.

    Nunca se debe modificar el estado de la máquina con una inmediata acción personalizada. El uso de un aplazamiento de uno, y mantener suplantar a ninguna, y se debe trabajar:

    <CustomAction Id='comReg' Directory='INSTALLLOCATION' Execute='deferred' Impersonate='no' ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase' Return='check' />

    EDITAR: Programación de la acción personalizada utilizando el InstallExecuteSequence elemento:

    <InstallExecuteSequence>
        <Custom Action='comReg' Before='InstallFinalize'/>
    </InstallExecuteSequence>
    me muestra un error como Error 33 ICE77: comReg es un en-secuencia de comandos de acción personalizado. Debe ser secuenciado entre el InstallInitialize acción y la InstallFinalize acción en la tabla InstallExecuteSequence @tjleigh
    Donde se programó la acción personalizada? Mira a tu <InstallExecuteSequence> elemento. Como los estados de error, debe ser entre InstallInitialize y InstallFinalize. Probablemente me puso Before="InstallFinalize".
    tjleigh : he editado mi pregunta,puede usted por favor me ayude a salir de esto.!
    Véase mi edición, se necesita Antes de de Después de InstallFinalize.
    Bot de los elementos dentro de la InstallExecuteSequence (ie) comReg y conUnReg debe tener Antes solo ah.?

    OriginalEl autor tjleigh

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea