2011-07-20 17 views
6

Sé que hay varias publicaciones en las secuencias de comandos de Wix y PowerShell, pero después de probar las soluciones de esas publicaciones, todavía no obtengo los resultados deseados. Para explicar mi situación, he creado un proyecto de instalación de Wix que tomará 2 scripts de Powershell y un archivo msu de mi máquina local (ejecutando Windows 7) y los juntará en un archivo msi. si ejecuto el archivo msi en mi máquina virtual de prueba (ejecutando Windows Server 2008 r2) los archivos se copian en su directorio especificado. Estupendo. Hay un inconveniente de tener un nuevo elemento en la lista Agregar o quitar programas, pero sería algo a lo que me acercaría más adelante.Wix - instalar y ejecutar un script de powershell

(los scripts de PowerShell instalarán la MSU, editar un archivo de configuración y puesta en servicio - funciona bien cuando se ejecuta manualmente)

Lo que he intentado hacer después de recibir los archivos copiados en el objetivo de la máquina es de ejecutar uno de los scripts de Powershell copiados, pero hasta ahora no he podido lograr esto.

mi código .wxs se parece a esto (escrito y compilado usando TFS 2010)

<?xml version="1.0" encoding="UTF-8"?> 
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Product Id="a89cc681-d617-43ea-817e-1db89b941bf2" Name="Test1" Language="1033" Version="1.0.0.0" Manufacturer="Test1" UpgradeCode="d8db2663-2567-4bb8-9023-09988838eb55"> 
    <Package InstallerVersion="200" Compressed="yes" /> 

<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 

<!-- Set up the directory --> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="IISTIERINSTALLATION" Name="IISTierInstallation"> 
    </Directory> 
</Directory> 

<!-- Copy the files --> 
<DirectoryRef Id="IISTIERINSTALLATION"> 
    <Component Id ="C2WTS_update_file" Guid="11960C39-12EB-4777-B43F-394ADB352DD3"> 
     <File Id="C2WTSmsu" Name="Windows6.1-KB974405-x64.msu" Source="C:\PS Scripts\Windows6.1-KB974405-x64.msu" /> 
    </Component> 

    <Component Id ="C2WTSInstallScript" Guid="C85ED4DB-BDC1-4DD1-84FE-41D7463C6365"> 
     <File Id="C2WTSscript1" Name="C2WTS_service_install.ps1" Source="C:\PS Scripts\C2WTS_service_install.ps1" /> 
    </Component> 

    <Component Id ="C2WTSxmlScript" Guid="AF1F85A7-88F7-4BBA-89D9-6817CFAA74F9"> 
     <File Id="C2WTSscript2" Name="Edit_c2wts_config.ps1" Source="C:\PS Scripts\Edit_c2wts_config.ps1" /> 
    </Component> 
</DirectoryRef> 

    <Feature Id="ProductFeature" Title="Test1" Level="1"> 
     <ComponentRef Id="C2WTS_update_file" /> 
    <ComponentRef Id="C2WTSInstallScript" /> 
    <ComponentRef Id="C2WTSxmlScript" /> 
     <ComponentGroupRef Id="Product.Generated" /> 
    </Feature> 

<!-- Run custom action to run the powershell script--> 
<Property Id="POWERSHELLEXE"> 
    <RegistrySearch Id="POWERSHELLEXE" 
        Type="raw" 
        Root="HKLM" 
        Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" 
        Name="Path" /> 
</Property> 

<SetProperty Id="RunPSscript" 
     After="InstallFiles" 
     Sequence="execute" 
     Value ="&quot;[POWERSHELL.EXE]&quot; -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#C2WTS_service_install.ps1]' ; exit $$($Error.Count)&quot;" /> 

<CustomAction Id="RunPSscript" 
       BinaryKey="WixCA" 
       DllEntry="CAQuietExec" 
       Execute="deferred" 
       Return="check" 
       Impersonate="yes" /> 

    <Custom Action="RunPSscript" After="InstallFiles"> 
    <![CDATA[NOT Installed]]> 
    </Custom> 

</Product> 
</Wix> 

Dado que la adición de la actividad personalizada para llevar a cabo la secuencia de comandos PowerShell, no pasa nada cuando corro el MSI. Los archivos no aparecen en su carpeta como solía hacerlo y no hay nada instalado. ¿Alguien puede decirme dónde me estoy equivocando? Como se ha dicho, hay varias soluciones en la red acerca de problemas similares, pero ninguno de ellos ha trabajado para mí hasta ahora

ACTUALIZACIÓN

He intentado instalar el MSI con el registro activado, y el registro devuelto el siguiente 2 líneas:

CAQuietExec64: Error 0x80070057: no se pudo obtener datos de línea de comandos

CAQuietExec64: Error 0x80070057: no se pudo obtener la línea de comandos

Después de buscar en la red las correcciones para ese código de error, todavía no he encontrado ninguna respuesta para ayudar a resolver el problema. ¿Alguien tiene alguna idea? ¿Algún experto en Wix?

Gracias de antemano

+1

Inicie la resolución de problemas generando el registro de instalación (ejecute msiexec.exe/i {su archivo msi aquí}/log {ruta al registro}. – Dan

Respuesta

0

trate de cambiar cuando se ejecuta el SetProperty.

Parece que el elemento SetProperty se llama después de 'InstallFiles' y la acción personalizada también se establece para ejecutarse después de 'InstallFiles'. Usted podría intentar cambiar el elemento SetProperty Antes de ejecutar '' InstallFiles, somethink así:

<SetProperty Id="RunPSscript" 
    Before="InstallFiles" 
    Sequence="execute" 
    Value ="&quot;[POWERSHELL.EXE]&quot; -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#C2WTS_service_install.ps1]' ; exit $$($Error.Count)&quot;" /> 

El resto se ve bien, aunque normalmente tienen la acción personalizada envuelto en un elemento InstallExecuteSequence.

<InstallExecuteSequence> 
    <Custom Action="RunPSscript" After="InstallFiles"><![CDATA[NOT Installed]]>/Custom> 
</InstallExecuteSequence> 
2

es obvio que tiene este ejemplo del mismo sitio que yo ... te encontré uno de los errores, pero no el otro :-)

En su SetProperty Id = "RunPScript" nodo, necesita cambiar el [POWERSHELL.EXE] A [POWERSHELLEXE] según cómo se define en la propiedad anterior donde recupera la ruta del registro.

Cuestiones relacionadas