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

本文关键字:COM 工厂 失败 检索 CLSID 688EEEE5-6A7E-422F-B2E1-6AF00DC944A6 组件 | 更新日期: 2023-09-27 18:04:33

我正在创建停止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<ErrorRecord> errors = _PowerShell.Streams.Error.ReadAll();
    foreach (var item in errors)
    {
        Console.WriteLine(item.ToString());
    }
}
Console.ReadLine();

显示以下错误

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

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

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

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

来源

正如在评论部分指出的那样,如果您运行的是64位的PowerShell,那么为AnyCPU构建解决方案并取消勾选"Prefer 32位"即可解决问题。

继@Jenish Zinzuvadiya关于运行在x86/x64下的PowerShell的回答之后,在我的情况下,问题是我通过使用"Open Command Line"插件从Visual Studio启动PowerShell,该插件将PowerShell作为x86进程启动。

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