2009-02-17 18 views
13

J'ai un script powershell très simple (voir ci-dessous). J'ai installutil aliasés en ce qui suit dans mon profil:C# Powershell snapin ne s'enregistre pas en utilisant installutil

set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil 

En Powershell je simplement:

installutil assemplylocation.dll 

Ce retourne avec succès. (Installer/valider les deux se terminent avec succès). Pourtant quand je vérifie le registre, ou dans powershell en utilisant get-pssnapin -registered il ne montre pas mon assembly. Je l'ai fait l'autre jour et ça a bien fonctionné, mais je ne semble pas être capable de le reproduire ... s'il vous plaît aviser.

using System; 
using System.Management.Automation; 
using System.ComponentModel; 

namespace PSBook_2_1 
{ 
    [RunInstaller(true)] 
    public class PSBookChapter2MySnapIn : PSSnapIn 
    { 
     public PSBookChapter2MySnapIn() 
      : base() 
     { } 

    // Name for the PowerShell snap-in. 
    public override string Name 
    { 
     get 
     { 
      return "Wiley.PSProfessional.Chapter2"; 
     } 
    } 

    // Vendor information for the PowerShell snap-in. 
    public override string Vendor 
    { 
     get 
     { 
      return "Wiley"; 
     } 
    } 

    // Description of the PowerShell snap-in 
    public override string Description 
    { 
     get 
     { 
      return "This is a sample PowerShell snap-in"; 
     } 
    } 
} 

// Code to implement cmdlet Write-Hi 
[Cmdlet(VerbsCommunications.Write, "Hi")] 
public class SayHi : Cmdlet 
{ 
    protected override void ProcessRecord() 
    { 
     WriteObject("Hi, World!"); 
    } 
} 

// Code to implement cmdlet Write-Hello 
[Cmdlet(VerbsCommunications.Write, "Hello")] 
public class SayHello : Cmdlet 
{ 
    protected override void ProcessRecord() 
    { 
     WriteObject("Hello, World!"); 
    } 
} 

}

+0

question a été à l'exécution de ce dans la version 32 bits de Powershell, au lieu du 64- bit ... – downatone

Répondre

1

Est-ce que vous exécutez installutil en tant qu'utilisateur élevé? Il écrit des informations aux parties protégées du registre. Si vous faites cela en tant que non-administrateur sur Vista, cela peut produire des résultats étranges.

11

Transforme le problème était que j'avais 32 bits cmdlet - mais n'a été vérification de la version 64 bits de Powershell ...

+1

Je viens d'éprouver ce problème aussi. La liste des snapins est maintenue dans HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellSnapIns mais le registre est virtualisé par le système d'exploitation si vous y accédez avec un processus 32 bits.Vous pouvez voir les détails des appels de registre en utilisant Sysinternals Process Monitor. –

+1

Oui, donc la commande aurait dû être: set-alias installutil $ env: windir \ Microsoft.NET \ Framework64 \ v2.0.50727 \ installutil – Mandrake

1

Exécuter en tant qu'administrateur pour exécuter ps

1

Le point clé pour moi ici me rappelais que Visual Studio 2010 est toujours une application 32 bits ce qui signifie que lorsque j'ai utilisé l'invite de commandes, il est par défaut à la variante 32 bits de InstallUtil. Il n'est pas immédiatement évident dans ce cas que les clés de registre sont donc écrites sur le nœud Wow64 bits au lieu du registre 64 bits proprement dit.

13

La réponse de downatone m'a mis sur la bonne voie mais mon problème était le contraire. Mon projet est réglé sur n'importe quel CPU et je suis sur Win7 x64 donc la PowerShell étant lancé à partir de mon code, puis l'installation de la DLL avec le snapin était de 64 bits. Cependant la commande d'installation je pointait à 32 bits .net runtime à savoir

C:\Windows\Microsoft.net\Framework\V4.0.30319\installutil myDLL.dll 

quand il aurait dû être

C:\Windows\Microsoft.net\Framework64\V4.0.30319\installutil myDLL.dll 

Notez le 64 dans le chemin du cadre.

0

a connu la même question - je tentais d'utiliser la commande

C:\Windows\Microsoft.net\Framework\V4.0.30319\installutil myDLL.dll 

au lieu de

C:\Windows\Microsoft.net\Framework64\V4.0.30319\installutil myDLL.dll 

tout en ayant 64 cmdlet bits sur OS win2k8 x64 .. (config projet Any CPU.)