С# PowerShell Snapin не регистрируется с помощью installutil
У меня действительно простая powershell script (см. ниже).
У меня есть installutil aliased, используя в моем профиле следующее:
set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil
В powershell я просто:
installutil assemplylocation.dll
Это возвращается успешно. (Install/Commit завершают успешно).
Тем не менее, когда я проверяю реестр или в 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!");
}
}
}
Ответы
Ответ 1
Ответ на первый план поставил меня на правильный путь, но моя проблема была наоборот. Мой проект настроен на любой процессор, и я нахожусь на Win7 x64, поэтому запуск PowerShell из моего кода, а затем установка DLL с помощью snapin - 64 бит. Однако команда установки, которую я использовал, указывала на 32-разрядную версию .net. I.e.
C:\Windows\Microsoft.net\Framework\V4.0.30319\installutil myDLL.dll
когда это должно было быть
C:\Windows\Microsoft.net\Framework64\V4.0.30319\installutil myDLL.dll
Обратите внимание на 64 в пути Framework.
Ответ 2
Оказывается, проблема заключалась в том, что у меня был 32-разрядный командлет, но проверял только 64-разрядную версию powershell...
Ответ 3
Запустили ли вы installutil как повышенный пользователь? Он записывает информацию в защищенные части реестра. Если вы сделаете это как не-администратор на Vista, это может привести к странным результатам.
Ответ 4
запускается как администратор для запуска ps
Ответ 5
Ключевым моментом для меня здесь было запоминание того, что Visual Studio 2010 по-прежнему является 32-разрядным приложением, что означает, что когда я использовал командную строку, это по умолчанию было 32-битным вариантом InstallUtil. В этом случае не сразу видно, что ключи реестра поэтому записываются в Wow64-bit node вместо собственно 64-разрядного реестра.
Ответ 6
Опытный тот же вопрос -
Я пытался использовать команду
C:\Windows\Microsoft.net\Framework\V4.0.30319\installutil myDLL.dll
вместо
C:\Windows\Microsoft.net\Framework64\V4.0.30319\installutil myDLL.dll
имея 64-разрядный командлет (проект config. Любой процессор) на OS win2k8 x64..
Ответ 7
Мне пришлось использовать x86 (32-разрядную) версию PowerShell для добавления Snapin. Поскольку я нашел это не так прямо, как предполагалось, что здесь есть полезная ссылка, как открыть PowerShell 32bit:
http://technet.microsoft.com/en-us/library/hh847733.aspx