C# 检索CLSID为{688EEEE5-6A7E-422F-B2E1-6AF00DC944A6}的组件的COM类工厂失败

C# 检索CLSID为{688EEEE5-6A7E-422F-B2E1-6AF00DC944A6}的组件的COM类工厂失败,c#,asp.net,powershell,iis,iis-8,C#,Asp.net,Powershell,Iis,Iis 8,我正在创建停止IIS默认网站的应用程序。我使用PowerShell脚本来停止网站,因为该脚本是从我的网站执行的 这是我的剧本: Import-Module C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration Stop-Website 'Default Web Site' my copy code Start-Website 'Default Web Site' 这是我的C代码: PowerShell\u Po

我正在创建停止IIS默认网站的应用程序。我使用PowerShell脚本来停止网站,因为该脚本是从我的网站执行的

这是我的剧本:

Import-Module C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration
Stop-Website 'Default Web Site'
my copy code
Start-Website 'Default Web Site'
这是我的C代码:

PowerShell\u PowerShell=PowerShell.Create();
运行空间rs=RunspaceFactory.CreateRunspace();
rs.Open();
_PowerShell.Runspace=rs;
_PowerShell.AddScript(@“Set-ExecutionPolicy RemoteSigned-scope LocalMachine”).Invoke();
_PowerShell.AddScript(@“E:\DE.TEST\Power\u Shell\Scripts\StopIISDefaultSite.ps1”).Invoke();
if(_PowerShell.HadErrors)
{
集合错误=_PowerShell.Streams.Error.ReadAll();
foreach(错误中的变量项)
{
Console.WriteLine(item.ToString());
}
}
Console.ReadLine();
它显示以下错误

检索CLSID为{688EEEE5-6A7E-422F-B2E1-6AF00DC944A6}的组件的COM类工厂失败,原因是以下错误:80040154类未注册(HRESULT中的异常:0x80040154(REGDB_E_CLASSNOTREG))


您需要检查运行PS代码的PowerShell实例是32位还是64位,并为该目标平台生成解决方案。 您可以使用以下方法进行检查:

if([IntPtr]::size -eq 8) { Write-Host 'x64' } else { Write-Host 'x86' }


正如评论集中指出的,如果您运行的是64位PowerShell,那么为任何CPU构建解决方案并取消选中“首选32位”可以解决问题。

继@Jenish Zinzuvadiya关于PowerShell以x86/x64运行的回答之后,在我的案例中,问题是我使用“Open Command Line”插件,作为x86进程启动PowerShell


从“开始”菜单启动PowerShell作为x64进程,这为我解决了问题。

我正在使用任何CPU。我不是PowerShell的主控程序:(我将其更改为x86。仍然会发生错误。显然,该计算机上没有注册某些内容(即需要注册的COM组件,以便对其执行代码)@CodeCaster似乎是另一种方式,我们可以使用任何CPU来执行这件事吗?为任何未选中“首选32位”的CPU构建似乎适合我(但我只在64位机器上测试过)。
if([IntPtr]::size -eq 8) { Write-Host 'x64' } else { Write-Host 'x86' }