Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed

感情迁移 提交于 2019-12-09 16:22:11

问题


I am creating application which stop the IIS Default Web Site. I used a PowerShell script to stop website because that script is executed form my website.

This is my script:

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

And this is my C# code:

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();

It shows the following error

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)).


回答1:


You need to check whether the PowerShell instance you are running your PS code under is 32-bit or 64-bit and make your solution build for that target platform. You can check this using:

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

Source

As pointed out in the comments setion, if you are running PowerShell 64-bit, building your solution for AnyCPU and unchecking "Prefer 32-bit" solves the issue.




回答2:


Following on from @Jenish Zinzuvadiya's answer regarding PowerShell running as x86/x64, in my case the problem was that I was launching PowerShell from Visual Studio by using the "Open Command Line" plugin, which was launching PowerShell as an x86 process.

Launching PowerShell from the Start Menu did so as an x64 process and that resolved the problem for me.



来源:https://stackoverflow.com/questions/31626244/retrieving-the-com-class-factory-for-component-with-clsid-688eeee5-6a7e-422f-b2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!