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

我正在创建停止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 _PowerShell = PowerShell.Create(); Runspace rs = RunspaceFactory.CreateRunspace(); rs.Open(); _PowerShell.Runspace = rs; _PowerShell.AddScript(@"Set-ExecutionPolicy RemoteSigned -scope LocalMachine").Invoke(); _PowerShell.AddScript(@"E:\DE.TEST\Power_Shell\Scripts\StopIISDefaultSite.ps1").Invoke(); if (_PowerShell.HadErrors) { Collection errors = _PowerShell.Streams.Error.ReadAll(); foreach (var item in errors) { Console.WriteLine(item.ToString()); } } Console.ReadLine(); 

它显示以下错误

检索具有CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6}的组件的COM类工厂由于以下错误而失败:80040154未注册类(HRESULTexception:0x80040154(REGDB_E_CLASSNOTREG))。

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

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

资源

正如评论文章中所指出的,如果您运行的是PowerShell 64位,那么为AnyCPU构建解决方案并取消选中“Prefer 32-bit”可以解决问题。