2009-02-17 11 views
13

Mam naprawdę prosty skrypt powłoki (zobacz poniżej). Mam installutil alias za pomocą następujących w moim profilu:C# Powershell snapin nie rejestruje się przy użyciu installutil

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

PowerShell po prostu:

installutil assemplylocation.dll 

ta zwraca pomyślnie. (Instaluj/Zatwierdź oba zakończono pomyślnie). Jednak po sprawdzeniu rejestru lub w trybie powershell za pomocą polecenia get-pssnapin - nie jest wyświetlane moje złożenie. Zrobiłem to drugi dzień i wszystko działało dobrze, ale wydaje mi się, że nie mogę go powielić ... proszę o radę.

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

Problem był z tym systemem w wersji 32-bitowej z PowerShell, zamiast 64- bit ... – downatone

Odpowiedz

1

Czy uruchomić installutil jako podwyższonej użytkownik? Piszą informacje do chronionych części rejestru. Jeśli robisz to jako nieadministrator w systemie Vista, może to dawać dziwne wyniki.

11

Okazuje się, że problemem było to, że miałem 32-bitową komandletu - ale tylko sprawdzanie wersji 64-bitowej powershell ...

+1

Po prostu doświadczyłem tego problemu. Lista snapin jest utrzymywana w HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellSnapIns, ale rejestr zostaje zwirtualizowany przez system operacyjny, jeśli uzyskujesz do niego dostęp za pomocą procesu 32-bitowego.Szczegółowe informacje na temat wywołań rejestru można uzyskać, korzystając z narzędzia Sysinternals Process Monitor. –

+1

Tak, więc polecenie powinno być: set-alias installutil $ env: windir \ Microsoft.NET \ Framework64 \ v2.0.50727 \ installutil – Mandrake

1

Uruchom jako administrator, aby uruchomić ps

1

Kluczową kwestią dla ja tutaj pamiętam, że Visual Studio 2010 jest nadal aplikacją 32-bitową, co oznacza, że ​​kiedy użyłem Command Prompt, domyślnie zainstalowałem 32-bitowy wariant InstallUtil. W tym przypadku nie jest to od razu oczywiste, że klucze rejestru są zapisywane w węźle Wow64-bit, zamiast w rejestrze 64-bitowym właściwym.

13

Odpowiedź downatone postawiła mnie na dobrej drodze, ale mój problem był odwrotny. Mój projekt jest ustawiony na dowolny procesor i jestem na Win7 x64, więc Powerhell uruchamiany z mojego kodu, a następnie instalowanie biblioteki dll z snapinem było 64-bitowe. Jednak polecenie zainstalowania Kiedyś był wskazując na 32 bit .NET Runtime tj

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

kiedy to powinna być

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

Nota 64 w ścieżce ramowej.

0

Doświadczony ten sam problem - starałem się użyć polecenia

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

zamiast

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

mając 64 bit komandletu na OS win2k8 x64 .. (config projektu Każda CPU).

Powiązane problemy