为 CLSID 为 {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} 的组件检索 COM class 工厂失败
Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed
我正在创建停止 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();
显示如下错误
Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
您需要检查您 运行 您的 PS 代码所在的 PowerShell 实例是 32 位还是 64 位,并为该目标平台构建您的解决方案。
您可以使用以下方式检查:
if([IntPtr]::size -eq 8) { Write-Host 'x64' } else { Write-Host 'x86' }
Source
正如评论部分所指出的,如果您是 运行 PowerShell 64 位,为 AnyCPU 构建解决方案并取消选中 "Prefer 32-bit" 即可解决问题。
根据@Jenish Zinzuvadiya 关于 PowerShell 运行 的回答 x86/x64,在我的例子中,问题是我使用 [=14= 从 Visual Studio 启动 PowerShell ] 插件,将 PowerShell 作为 x86 进程启动。
从“开始”菜单启动 PowerShell 是作为 x64 进程启动的,这为我解决了问题。
我正在创建停止 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();
显示如下错误
Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
您需要检查您 运行 您的 PS 代码所在的 PowerShell 实例是 32 位还是 64 位,并为该目标平台构建您的解决方案。 您可以使用以下方式检查:
if([IntPtr]::size -eq 8) { Write-Host 'x64' } else { Write-Host 'x86' }
Source
正如评论部分所指出的,如果您是 运行 PowerShell 64 位,为 AnyCPU 构建解决方案并取消选中 "Prefer 32-bit" 即可解决问题。
根据@Jenish Zinzuvadiya 关于 PowerShell 运行 的回答 x86/x64,在我的例子中,问题是我使用 [=14= 从 Visual Studio 启动 PowerShell ] 插件,将 PowerShell 作为 x86 进程启动。
从“开始”菜单启动 PowerShell 是作为 x64 进程启动的,这为我解决了问题。