diff --git a/src/powershell-native/nativemsh/pwrshcommon/pwrshcommon.cpp b/src/powershell-native/nativemsh/pwrshcommon/pwrshcommon.cpp index 41457cb23..35f8286e8 100644 --- a/src/powershell-native/nativemsh/pwrshcommon/pwrshcommon.cpp +++ b/src/powershell-native/nativemsh/pwrshcommon/pwrshcommon.cpp @@ -1355,14 +1355,27 @@ namespace NativeMsh LPCSTR vals[nMaxProps]; int nProps = 0; - // If I do not include my managed enload point dll in this list, I get a security error. + // The TPA list is the required list of CoreCLR assemblies that comprise + // the trusted platform upon which PowerShell will run. std::stringstream assemblyList; bool listEmpty = true; this->GetTrustedAssemblyList(hostEnvironment.GetCoreCLRDirectoryPath(), assemblyList, listEmpty); - char coreCLRPowerShellExtInstallPath[MAX_PATH]; - ::ExpandEnvironmentStringsA(coreCLRPowerShellExtInstallDirectory, coreCLRPowerShellExtInstallPath, MAX_PATH); - this->GetTrustedAssemblyList(coreCLRPowerShellExtInstallPath, assemblyList, listEmpty); + // Fall back to attempt to load the CLR from the inbox location if + // the configuration file pointed to an invalid directory. + if (listEmpty) + { + char coreCLRPowerShellExtInstallPath[MAX_PATH]; + ::ExpandEnvironmentStringsA(coreCLRPowerShellExtInstallDirectory, coreCLRPowerShellExtInstallPath, MAX_PATH); + this->GetTrustedAssemblyList(coreCLRPowerShellExtInstallPath, assemblyList, listEmpty); + } + if (listEmpty) + { + // No CoreCLR assemblies were found in either location. There is no + // point in continuing. + this->output->DisplayMessage(false, g_STARTING_CLR_FAILED, GetLastError()); + return EXIT_CODE_INIT_FAILURE; + } props[nProps] = "TRUSTED_PLATFORM_ASSEMBLIES"; std::string tempStr = assemblyList.str();