C # Powershell Snapin не регистрируется с помощью installutil - PullRequest
13 голосов
/ 17 февраля 2009

У меня действительно простой скрипт powershell (см. Ниже). Я установил псевдоним installutil, используя в своем профиле следующее:

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

В PowerShell я просто:

installutil assemplylocation.dll

Это успешно возвращается. (Установить / зафиксировать оба успешно завершены). Тем не менее, когда я проверяю реестр или в PowerShell, используя get-pssnapin -registered, он не показывает мою сборку. Я сделал это на днях, и это работало нормально, но я, кажется, не в состоянии дублировать это ... пожалуйста, сообщите.

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!");
    }
}

}

Ответы [ 7 ]

13 голосов
/ 07 ноября 2011

ответ Даунтоне поставил меня на правильный путь, но моя проблема была противоположной. Мой проект настроен на любой процессор, и я нахожусь на Win7 x64, поэтому PowerShell запускается из моего кода, а затем установка DLL с оснасткой была 64-битной. Однако команда установки, которую я использовал, указывала на 32-разрядную среду выполнения .net, т.е.

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

когда это должно было быть

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

Обратите внимание на 64 в пути Framework.

11 голосов
/ 12 марта 2009

Оказывается, проблема в том, что у меня был 32-разрядный командлет, но я проверял только 64-разрядную версию powershell ...

1 голос
/ 01 июля 2011

Ключевым моментом для меня было то, что я вспомнил, что Visual Studio 2010 по-прежнему является 32-разрядным приложением, а это означает, что при использовании командной строки оно по умолчанию использовало 32-разрядный вариант InstallUtil. В этом случае не очевидно, что ключи реестра записываются в Wow64-битный узел, а не в 64-битный реестр.

1 голос
/ 08 июля 2009

Запуск от имени администратора для запуска PS

1 голос
/ 18 февраля 2009

Вы запускали installutil как пользователь с повышенными правами? Он записывает информацию в защищенные части реестра. Если вы сделаете это без прав администратора в Vista, это может привести к странным результатам.

0 голосов
/ 17 декабря 2013

Мне пришлось использовать x86 (32-битную) версию PowerShell, чтобы добавить Snapin. Как я понял, это не так просто, как должно быть, вот полезная ссылка, как открыть PowerShell 32bit:

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

0 голосов
/ 28 августа 2012

испытал ту же проблему - Я пытался использовать команду

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

вместо

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

при наличии 64-битного командлета (конфигурации проекта. Любой ЦП) на ОС win2k8 x64 ..

...