start - C#Powershell snapin no se registra con installutil
installutil.exe error windows 10 (7)
¿Ejecutas installutil como un usuario elevado? Escribe información en porciones protegidas del registro. Si haces esto como un no administrador en Vista, puede producir resultados extraños.
Tengo un script de PowerShell muy simple (ver más abajo). Tengo installutil alias usando lo siguiente en mi perfil:
set-alias installutil $env:windir/Microsoft.NET/Framework/v2.0.50727/installutil
En PowerShell yo simplemente:
installutil assemplylocation.dll
Esto regresa exitosamente (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!");
}
}
}
Resulta que el problema era que tenía un cmdlet de 32 bits, pero solo estaba verificando la versión de 64 bits de powershell ...
ejecutar como administrador para ejecutar ps
El punto clave para mí aquí fue recordar 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.
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 comando de instalación que utilicé apuntaba al tiempo de ejecución .net de 32 bits, 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
Tenga en cuenta el 64 en la ruta del Marco.
Tuve que usar la versión x86 (32 bits) de PowerShell para agregar Snapin. Como encontré que no es tan sencillo como se supone que debe ser, aquí hay un enlace útil sobre cómo abrir PowerShell 32bit:
Tuve el mismo problema: estaba intentando usar 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
mientras tenga un cmdlet de 64 bits (configuración del proyecto. Cualquier CPU) en el sistema operativo win2k8 x64.