2009-02-17 8 views
13

Tengo un script de powershell realmente simple (ver a continuación). Tengo installutil usando un alias en el siguiente perfil:C# Powershell snapin no se registra con installutil

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

En PowerShell simplemente:

installutil assemplylocation.dll 

Esto devuelve correctamente. (Instalar/Confirmar ambos se completan con éxito). Sin embargo, cuando reviso el registro, o en powershell usando get-pssnapin -registered, no muestra mi ensamblado. Lo hice el otro día y funcionó bien, pero parece que no puedo duplicarlo ... por favor, avisen.

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

problema fue con la ejecución de este en la versión de 32 bits de PowerShell, en lugar del 64- bit ... – downatone

Respuesta

1

¿No le alcanzó installutil como un usuario elevados? Escribe información en porciones protegidas del registro. Si haces esto como un no administrador en Vista, puede producir resultados extraños.

11

Resulta que el problema era que tenía un cmdlet de 32 bits - pero sólo estaba comprobando la versión de 64 bits de PowerShell ...

+1

Acabo de experimentar este problema también. La lista de snapins se mantiene en HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellSnapIns pero el registro se Virtualiza por el sistema operativo si está accediendo a él con un proceso de 32 bits.Puede ver los detalles de las llamadas de registro usando Sysinternals Process Monitor. –

+1

Sí, así que el comando debería haber sido: set-alias installutil $ env: windir \ Microsoft.NET \ Framework64 \ v2.0.50727 \ installutil – Mandrake

1

Ejecutar como administrador para ejecutar ps

1

El punto clave para aquí estaba recordando que Visual Studio 2010 sigue siendo una aplicación de 32 bits, lo que significa que cuando utilicé el símbolo del sistema, de manera predeterminada adopté la variante de 32 bits de InstallUtil. No es inmediatamente obvio en este caso que las claves de registro se escriben en el nodo Wow64-bit en lugar del registro propio de 64 bits.

13

La respuesta de downatone me puso en el camino correcto, pero mi problema fue al revés. Mi proyecto está configurado para cualquier CPU y estoy en Win7 x64, por lo que el powershell que se lanzó desde mi código y luego la instalación del dll con snapin fue de 64 bits. Sin embargo, el mandato de instalación utilicé estaba apuntando a la de 32 bits .NET Runtime es decir

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

cuando debería haber sido

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

Nota del 64 en la trayectoria de Marco.

0

experimentado el mismo problema - yo estaba tratando de utilizar el comando

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

en lugar de

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

al tiempo que cmdlet 64 bits en x64 OS Win2k8 .. (config proyecto Cualquier CPU).