У меня есть сценарий 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-битная.