Как устранить ошибку «Класс не зарегистрирован» для сценария PowerShell в InstallShield 2015?

У меня есть сценарий PowerShell, который отлично работает, если выполняется вручную, но когда я пытаюсь выполнить его, создав функцию в InstallShield 2015, происходит сбой с ошибкой ниже:

get-webconfiguration: получение фабрики классов COM для компонента с CLSID 80040154 класс не зарегистрирован {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} НЕУДАЧА ИЗ-ЗА СЛЕДУЮЩЕЙ ОШИБКИ: класс 80040154 не зарегистрирован (исключение из HRESULT: 0X80040154 (REGDB_E_CLASSNOTREG))

Ниже приведена функция InstallShield, которая вызывается во время установки для обновления физического пути виртуального приложения в IIS.

function VirtualAppPowershell()

    STRING szMsg, szCmdLine, szAppPath1, szDir;
    NUMBER nResult;
    STRING szFile, svDir;

begin                               

    try
        szAppPath1 = "powershell.exe";
        //szAppPath1 = "powershell_ise.exe";

        szDir = TARGETDIR;

        svDir = TARGETDIR + "Demo\\Script\\";
        szCmdLine = "-File .\\VirtualAppPathChange.ps1 \"" + svDir +"\\\""; 


        StrRemoveLastSlash (svDir);

        ChangeDirectory(svDir);

        szMsg = "Updating PhysicalPath of Virtual application";                                    

        SdShowMsg ( szMsg , TRUE );
        Delay (5);       
        nResult = LaunchAppAndWait (szAppPath1, szCmdLine, WAIT|LAAW_OPTION_MINIMIZED);
        SdShowMsg ( szMsg , FALSE );  

    catch
        WriteLogAsError(FALSE, Err.Number, Err.Description);
        Err.Raise();
    endcatch;

    return nResult;
end;  

Вот код сценария PowerShell для справки:

#Code to get PhysicalPath of Virtual application
$WebClientPath=(get-webapplication DemoApp).PhysicalPath

# Code to get Installation Directory path
$CommonNode=Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Demo\Platform\Common
$InstallationDir=$CommonNode.InstallationDir

#Appended new foldername to $Path1
$Path1= $InstallationDir + "Test\"

#Appended old foldername to $Path2
$Path2= $InstallationDir + "Dem\"


# Code to get Version of application
$PlatformNode=Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Demo\Platform
$Version=$PlatformNode.VERSION

if($Version -ge "7.3.0.0")
{
    Set-ItemProperty 'IIS:\Sites\Default Web Site\DemoApp' -Name physicalPath -Value "$Path1"
}
else
{
    Set-ItemProperty 'IIS:\Sites\Default Web Site\DemoApp' -Name physicalPath -Value "$Path2"
}

Примечание. У меня 64-разрядная ОС.


comment
Обычно я вижу эту ошибку при попытке использовать COM-объекты с неправильной разрядностью, т. е. ваш InstallShield работает как 32-битный и пытается создать 64-битный COM-объект или наоборот.   -  person Maximilian Burszley    schedule 05.07.2018
comment
@ TheIncorrigible1, так есть ли другой способ, с помощью которого я могу обновить физический путь существующего виртуального приложения в IIS с помощью InstallShield - установщик InstallScript во время установки и снова установить старый физический путь во время удаления?   -  person SRP    schedule 06.07.2018
comment
Вы это исправили? У меня такая же проблема. Уже пытался выполнить с помощью powershell 32bit и 64bit с той же ошибкой.   -  person André Morales    schedule 12.07.2019
comment
Если бы у Дженкинса была проблема с выполнением powershell, возможно, это та же проблема. Решено этим stackoverflow.com/questions/28331924/   -  person André Morales    schedule 12.07.2019