2012-03-08 9 views

Respuesta

13

Por lo tanto, la solución final era como esto:

<CustomAction Id="Install" Directory="APPLICATIONROOTDIRECTORY" 
       Execute="deferred" Impersonate="no" Return="ignore" 
       ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -install" /> 

<CustomAction Id="Uninstall" Directory="APPLICATIONROOTDIRECTORY" 
       Execute="deferred" Impersonate="no" Return="ignore" 
       ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -uninstall" /> 

<InstallExecuteSequence> 

    <Custom Action='Install' After='InstallFiles' > 
    $ProductComponent = 3 
    </Custom> 

    <Custom Action='Uninstall' After='InstallInitialize' > 
    ?ProductComponent = 3 
    </Custom> 

</InstallExecuteSequence> 

¿Algún consejo para mejorarlo?

+0

¿Qué es ProductComponent? –

17

Tener un vistazo a este blog en la sección Cómo al autor encargo acciones que requieren privilegios administrativos

Otra link que realmente explica todos los tipos de acciones personalizadas. El elemento CustomAction en Wix.

Esto debería ayudarlo un poco más.

Después de mirar a su solución que parece que están haciendo un CustomAction Tipo 18, aquí me pega el contenido del blog anterior para aquellos tipos:

acción de un tipo de 18 llama a un archivo ejecutable que se instala con el aplicación durante la sesión actual. La columna Origen en la tabla CustomAction contiene la clave del registro en la tabla Archivo.

La columna de destino en la tabla CustomAction contiene la cadena de línea de comando para el ejecutable. Se aplican todas las opciones de procesamiento de devolución, programación de ejecución y ejecución in-script.

Debido a que el archivo se instala con la aplicación, no están secuenciando restricciones a medida Tipo de acción: 18

If the source file is not already installed on the computer: 
    Custom action must be sequenced after CostFinalize action because only after this action path to the file can be resolved. 
If the source file is not already installed on the computer: 
    Deferred custom actions of this type must be sequenced after the InstallFiles action. 
    Non-deferred custom actions of this type must be sequenced after the InstallFinalize action. 

punto de entrada a la acción personalizada recibe el identificador de la sesión de instalación. Durante la ejecución de acciones personalizadas diferidas, es posible que la sesión ya no exista. Para obtener el valor de las propiedades, use la propiedad CustomActionData.

Aquí es cómo añadir 18 Tipo de acción personalizada en Wix:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Component Id="Component1" 
      Guid="*"> 
    <File Id="MyCA" Name="MyCA.exe" /> 
    </Component> 
</Directory> 

<CustomAction Id="DoSomething" 
       FileKey="MyCA" 
       ExeCommand="-switch" 
       Execute="deferred" 
       Return="check" 
       HideTarget="no" 
       Impersonate="no" /> 

<InstallExecuteSequence> 
    <Custom Action="DoSomething" Before="InstallFinalize" /> 
</InstallExecuteSequence> 

En primer lugar, añadimos MyCA.exe a la tabla de archivos.

También agregamos una acción personalizada de Tipo 18 a la tabla CustomAction. El atributo FileKey apunta al elemento con la acción personalizada dll. El atributo ExeCommand especifica la cadena de línea de comando para el ejecutable.

Lo último que debe hacer es programar nuestra acción personalizada en todas las tablas de secuencia requeridas.

Esto debería ayudarle a cabo, más o menos lo que falta, pero sugieren fuertemente que nos fijamos en todos los tipos de acciones personalizadas que le ayudarán más adelante al hacer más instaladores

+0

Esto no es suficiente para hacer que funcione. Es necesario instalar acciones personalizadas en el punto de secuencia correcto y usar las condiciones adecuadas para lidiar con el escenario de actualización, reparación, etc. :( – user626528

+0

Pero esto responde a su pregunta. Proporciona una guía clara de cómo ejecutar CA elevado, y usted es libre para desarrollar la idea más allá para construir lo que necesita. –

+2

@Yan Sklyarenko, no. Esto es 10% de la respuesta real – user626528

5

Podría agregar 'NO QUITAR' para Install & Repair Sequence. Y 'Instalado AND (REMOVE = "ALL")' solo para la secuencia de Desinstalar.

<InstallExecuteSequence> 
     <Custom Action='Install' After='InstallFiles' > 
     NOT REMOVE 
     </Custom> 

     <Custom Action='Uninstall' After='InstallFiles' > 
     Installed AND (REMOVE = "ALL") 
     </Custom> 

    </InstallExecuteSequence> 
0

Hope esto sería útil para alguien que está luchando con el sistema de herramienta Wix Etiquetas: CustomAction, InstallExecuteSequence, exe Ejecutar después de la instalación Wix completos, archivo binario o de recursos dentro de Wix

Sin embargo, no es capaz de encontrar la forma conseguir hecho de Bootstrapper

Nombre de archivo: Product.wxs

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="TestingQtExec" Language="1033" Version="1.0.0.0" 
      Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

    <MediaTemplate EmbedCab="yes" /> 

    <Feature Id="ProductFeature" Title="TestingQtExec" Level="1"> 
     <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 

    <Binary Id="WixCA1" 
       SourceFile="FTDI.exe"/> 

    <!-- install plugin --> 
    <CustomAction Id="FTDIInstall" 
       BinaryKey ="WixCA1" 
       ExeCommand="/passive" 
       Execute="commit" 
       Return="asyncNoWait" 
       HideTarget="no" 
       Impersonate="no" /> 


    <InstallExecuteSequence> 

     <Custom Action="FTDIInstall" Before="InstallFinalize" /> 
    </InstallExecuteSequence> 

       </Product> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="TestingQtExec" /> 
     </Directory> 
    </Directory> 
    </Fragment> 

    <Fragment> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <Component Id="cmpSampleTXT" Guid="*"> 
     <File Source="Sample.txt" /> 
     </Component> 
    </ComponentGroup> 
    </Fragment> 
</Wix> 
+0

¿Podrías explicar cómo responde esto a la pregunta de los carteles originales? – Kmeixner

Cuestiones relacionadas