2011-07-20 5 views
6

Je sais qu'il ya plusieurs messages sur des scripts PowerShell et Wix, mais après avoir essayé les solutions de ces postes, je ne suis toujours pas obtenir mes résultats souhaités. Pour expliquer ma situation, j'ai créé un projet d'installation Wix qui saisira 2 scripts Powershell et un fichier MSU de ma machine locale (fonctionnant sous Windows 7) et regrouper ceux-ci dans un fichier msi. si je lance le fichier msi sur mon test machine virtuelle (exécutant Windows Server 2008 R2) les fichiers sont copiés dans leur répertoire spécifié. Génial. Il y a un inconvénient d'avoir une nouvelle exposition d'article dans la liste Ajout/Suppression de programmes, mais ce serait quelque chose que je voudrais aborder à une date ultérieure.Wix - installer et exécuter un script Powershell

(les scripts PowerShell installer le MSU, modifier un fichier de configuration et lancer un service - fonctionne très bien lors de l'exécution manuelle)

Ce que j'ai essayé de faire après avoir obtenu les fichiers copiés sur la machine cible est à exécuter l'un des scripts copiés Powershell, mais jusqu'à présent, je n'ai pas été en mesure d'y parvenir.

mon code .wxs ressemble à ceci (écrit et compilé en utilisant 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> 

Depuis l'ajout de l'activité personnalisée pour exécuter le script Powershell, rien ne se passe quand je lance le msi. Les fichiers n'apparaissent pas dans leur dossier comme ils le faisaient et rien n'est installé. Quelqu'un peut-il me dire où je vais mal? Comme l'a dit, il y a plusieurs solutions sur le net sur des problèmes similaires, mais aucun n'a fonctionné pour moi jusqu'à présent

MISE À JOUR

J'ai essayé d'installer le msi avec la journalisation activée, et le journal retourné les 2 suivantes lignes:

CAQuietExec64: erreur 0x80070057: Échec d'obtenir des données de ligne de commande

CAQuietExec64: erreur 0x80070057: n'a pas réussi à obtenir la ligne de commande

Après avoir cherché sur le net des correctifs pour ce code d'erreur, je n'ai toujours pas trouvé de réponses pour aider à résoudre le problème. Quelqu'un a une idée? Des experts Wix là-bas?

Merci à l'avance

+1

Commencez le dépannage en générant le journal d'installation (exécutez msiexec.exe/i {votre fichier msi ici}/log {chemin vers le journal}. – Dan

Répondre

0

Essayez de changer lorsque le SetProperty est exécuté.

Il ressemble à l'élément SetProperty est appelé « Après InstallFiles » et l'action personnalisée est également mis à courir après « InstallFiles ». Vous pouvez essayer de changer l'élément SetProperty Avant d'exécuter « InstallFiles », somethink comme ceci:

<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;" /> 

Le reste semble bien même si je dois normalement l'action personnalisée enveloppé dans un élément InstallExecuteSequence.

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

vous avez évidemment cet exemple du même site que moi ... vous trouvé une des erreurs, mais pas l'autre :-)

Dans votre SetProperty Id = « RunPScript » nœud, vous devez modifier le [POWERSHELL.EXE] à [POWERSHELLEXE] selon comment il est défini dans la propriété ci-dessus où vous récupérez le chemin à partir du Registre.

Questions connexes