2010-03-23 15 views
6

Tengo un componente ServiceInstall en un instalador de WiX en el que tengo la obligación de iniciar automáticamente o solicitar según los parámetros pasados ​​al MSI.Parametrizar la opción de inicio del servicio en el instalador de WiX

De modo que el elemento XML en cuestión es

<ServiceInstall Vital="yes" 
    Name="My Windows Service" 
    Type="ownProcess" 
    Account="[SERVICEUSERDOMAIN]\[SERVICEUSERNAME]" 
    DisplayName="My Service" 
    Password="[SERVICEUSERPASSWORD]" 
    Start="demand" 
    Interactive="no" 
    Description="Something interesting here" 
    Id="Service" 
    ErrorControl="ignore"></ServiceInstall> 

WiX no permitirá el uso de un parámetro para el atributo de inicio, por lo que Im pegado con suplicating completamente el componente con una condición, por ejemplo,/

<Component Id="ServiceDemand" 
       Guid="{E204A71D-B0EB-4af0-96DB-9823605050C7}" > 
     <Condition>SERVICESTART="demand"</Condition>  
... 

y duplicar completamente el componente completo, con una configuración diferente para el Inicio y una Condición diferente.

¿Alguien sabe de una solución más elegante? Una donde no tengo que mantener 2 monedas que hacen exactamente lo mismo excepto el atributo de inicio.

+0

Ay, ese tipo de chupa. Creo que estás atascado con el enfoque que estás usando hasta que alguien solucione eso en WiX. –

Respuesta

6

El campo de inicio de la tabla ServiceInstall no está formateado por lo que lo que está colocando con una propiedad no funcionará. Este enlace tiene algunas sugerencias útiles que pueden ayudarlo a pasar: ServiceInstall - Start element. Parece que la persona que publicó tuvo el mismo problema. Mi sugerencia favorita que ellos brindan es crear una acción personalizada que se ejecute antes de la acción InstallServices que cambiará el valor del elemento Start en la tabla de instalación del servicio.

Actualización: se modificó el enlace al sitio sugerido.

+0

Gracias por el enlace/información. Haré lo sugerido con CA, creo. – Jamiec

+0

Me parece que mis muchachos pueden responder mis preguntas. Aquí otro buen sitio que uso a menudo. http://blogs.technet.com/alexshev/pages/from-msi-to-wix.aspx –

+0

El enlace de Nabble ahora está roto. La búsqueda en ServiceInstall-Start-element debería proporcionarle un enlace al documento reubicado en wix o nabble. –

0

Desafortunadamente, la funcionalidad estándar de Wix para instalar y controlar servicios es bastante limitada.

Aunque no es ideal, pero se puede hacer usando CustomAction, por ejemplo usando CAQuietExec (que también guarda convenientemente salida al archivo de registro de la instalación si se utiliza uno)

<CustomAction Id="QtExec_Install_Cmd" Property="QtExec_Install" Value="sc create [SERVICE_NAME] binPath=&quot;[INSTALLFOLDER]$(var.MAIN_EXECUTABLE)&quot; start=[SERVICE_START_FLAG]" Execute="immediate" /> 
    <CustomAction Id="QtExec_Install" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" /> 
    <CustomAction Id="QtExec_Uninstall_Cmd" Property="QtExec_Uninstall" Value="sc delete [SERVICE_NAME]" Execute="immediate" /> 
    <CustomAction Id="QtExec_Uninstall" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" /> 
    <InstallExecuteSequence> 
    <Custom Action="QtExec_Install_Cmd" After="CostFinalize"/> 
    <Custom Action="QtExec_Install" After="InstallServices">&amp;WindowsService=3</Custom> 
    <Custom Action="QtExec_Uninstall_Cmd" After="CostFinalize"/> 
    <Custom Action='QtExec_Uninstall' Before="RemoveFiles">NOT &amp;WindowsService=3 AND NOT &amp;WindowsService=-1</Custom> 
    </InstallExecuteSequence> 

Nota:

  • WindowsService es el nombre de la característica

  • SERVICE_START_FLAG es la propiedad que controla si se iniciará el servicio

  • [installFolder] $ (var.MAIN_EXECUTABLE) - es el camino a ejecutable

  • SERVICE_NAMESTART_BREAK es el nombre deseado para el servicio Windows

+0

Wow gracias por la respuesta. Casi 7 años tarde, pero estoy seguro de que ayudará a alguien :) – Jamiec

+0

Jaja ... He estado usando Wix durante años ... probablemente debería parar ahora ... es una pena que no haya una alternativa adecuada de Microsoft, y su pregunta todavía es válida. – Ivan

Cuestiones relacionadas