2010-08-13 6 views
1

Arrière-plan: Je suis en train d'écrire une installation pour un composant SharePoint. En plus d'obtenir le logiciel sur la machine cible, je veux le configurer correctement. SharePoint (en particulier 2010) expose ses fonctionnalités de gestion via PowerShell. J'ai donc écrit une action C# personnalisée pour appeler une série de commandes, comme ceci:Appel de commandes PowerShell à partir d'une action personnalisée C# dans l'installation WiX

Runspace runSpace = RunspaceFactory.CreateRunspace(); 
runSpace.Open(); 
Pipeline pipeline = runSpace.CreatePipeline(); 

Command addSnapin = new Command("Add-PSSnapin"); 
addSnapin.Parameters.Add("Name", "Microsoft.SharePoint.Powershell"); 
pipeline.Commands.Add(addSnapin); 
pipeline.Invoke(); 

Command getSearchApp = new Command("Get-SPEnterpriseSearchServiceApplication"); 
pipeline = runSpace.CreatePipeline(); 
pipeline.Commands.Add(getSearchApp); 

Object searchApp = pipeline.Invoke().First().BaseObject; 
/* pass searchApp to other PS cmdlets */ 

Problème: Quand je lance ce code exécutable à partir d'un test, il fonctionne très bien. Toutefois, cela ne fonctionne pas lors de l'exécution d'une action personnalisée. Il échoue et le journal contient le message "Le terme" Get-SPEnterpriseSearchServiceApplication "n'est pas reconnu comme le nom d'une cmdlet ...". Cette applet de commande est censée être importée par la commande Add-PSSnapin (qui a réussi, pour autant que je sache).

Questions: Pourquoi PS peut trouver pas la fonction, lorsque la même séquence de commande fonctionne dans la console PS et quand exécuter dans mon programme de test? Y a-t-il un moyen plus simple de faire ce processus? WiX ne semblait pas avoir beaucoup de soutien pour les actions personnalisées complexes de PS (pas que la mienne soit très compliquée, mais ce n'est pas un one-liner).

+1

Après avoir exécuté la commande Add-PSSnapin, vérifiez la propriété Pipeline.Error pour voir si l'ajout échoue et pourquoi. –

+0

Ok, la collection d'erreurs contient "Aucun composant logiciel enfichable n'a été enregistré pour Windows PowerShell version 2". Après avoir effectué une recherche, j'ai réalisé que mon action personnalisée s'exécutait dans un processus 32 bits, qui ne peut probablement pas charger les cmdlets de gestion SP. Merci pour le conseil. – bmm6o

Répondre

3

Dans ce cas particulier, le composant logiciel enfichable n'a pas pu être chargé car l'action personnalisée s'exécutait en tant que processus 32 bits. J'ai changé les paramètres de construction pour le compiler en x64 et il a commencé à fonctionner. La suggestion de Keith était utile (+1) - j'ai supposé qu'un échec entraînerait une exception, mais ce n'est pas le cas.