2009-02-17 19 views
13

Tôi đã có một kịch bản PowerShell thực sự đơn giản (xem bên dưới). Tôi đã có installutil aliased bằng cách sử dụng sau đây trong hồ sơ cá nhân của tôi:C# Powershell snapin không đăng ký bằng cách sử dụng installutil

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

Trong PowerShell tôi chỉ đơn giản:

installutil assemplylocation.dll 

này trả về thành công. (Cài đặt/Cam kết cả hai đều thành công). Tuy nhiên, khi tôi kiểm tra sổ đăng ký, hoặc trong PowerShell sử dụng get-pssnapin -registered nó không hiển thị lắp ráp của tôi. Tôi đã làm điều này vào ngày khác và nó hoạt động tốt, nhưng tôi dường như không thể lặp lại nó ... xin vui lòng tư vấn cho.

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

Issue là với chạy này trong phiên bản 32bit của PowerShell, thay vì 64 bit ... – downatone

Trả lời

1

bạn đã chạy installutil như một người sử dụng cao? Nó ghi thông tin vào các phần được bảo vệ của registry. Nếu bạn làm điều này với tư cách là người không quản trị trên Vista, nó có thể tạo ra kết quả lạ.

11

Hóa ra vấn đề là tôi đã có một lệnh 32-bit - nhưng chỉ kiểm tra các phiên bản 64-bit của PowerShell ...

+1

Tôi cũng chỉ gặp vấn đề này. Danh sách các snapins được duy trì trong HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellSnapIns nhưng registry được Virtualised bởi hệ điều hành nếu bạn đang truy cập nó với một quá trình 32 bit.Bạn có thể xem chi tiết các cuộc gọi đăng ký bằng Sysinternals Process Monitor. –

+1

Vâng, vì vậy lệnh nên có được: set-alias installutil $ env: windir \ Microsoft.NET \ Framework64 \ v2.0.50727 \ installutil – Mandrake

1

Run as administrator để chạy ps

1

Điểm mấu chốt cho tôi ở đây đã nhớ rằng Visual Studio 2010 vẫn là một ứng dụng 32 bit có nghĩa là khi tôi sử dụng Command Prompt nó mặc định cho phiên bản 32-bit của InstallUtil. Nó không phải là ngay lập tức rõ ràng trong trường hợp này rằng các khóa registry do đó được ghi vào nút Wow64-bit thay vì đăng ký 64-bit thích hợp.

13

câu trả lời của downatone giúp tôi đi đúng hướng nhưng vấn đề của tôi là vòng đối diện. Dự án của tôi được đặt ở bất kỳ CPU nào và tôi đang sử dụng Win7 x64 để PowerShell được khởi chạy từ mã của tôi và sau đó cài đặt dll với snapin là 64 bit. Tuy nhiên quá trình cài đặt lệnh tôi đã sử dụng được trỏ đến bit 32 .net runtime ví dụ:

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

khi nó cần phải có được

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

Note 64 trong đường dẫn khung.

0

Có kinh nghiệm cùng một vấn đề - Tôi đã cố gắng để lệnh

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

thay vì

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

trong khi có 64 bit lệnh trên OS Win2k8 x64 sử dụng .. (config dự án Bất kỳ CPU.)

0

Tôi đã phải sử dụng phiên bản PowerShell x86 (32bit) để thêm Snapin. Như tôi đã tìm thấy nó không phải là thẳng về phía trước khi nó được cho là đây là một liên kết hữu ích thế nào để mở PowerShell 32bit:

http://technet.microsoft.com/en-us/library/hh847733.aspx

Các vấn đề liên quan