private static void DoAutoInstallPackages()
{
if (IsReinitializingTheSystem) return;
try
{
// This is not so good, unittests run and normal runs should have same semantic behavior.
// But if this is not here, some unittests will start failing. /MRJ
if (RuntimeInformation.IsUnittest) return;
var zipFiles = new List<AutoInstallPackageInfo>();
string directory = PathUtil.Resolve(GlobalSettingsFacade.AutoPackageInstallDirectory);
if (C1Directory.Exists(directory))
{
Log.LogVerbose(LogTitle, string.Format("Installing packages from: {0}", directory));
zipFiles.AddRange(C1Directory.GetFiles(directory, "*.zip")
.Select(f => new AutoInstallPackageInfo { FilePath = f, ToBeDeleted = true }));
}
else
{
Log.LogVerbose(LogTitle, string.Format("Auto install directory not found: {0}", directory));
}
if (RuntimeInformation.IsDebugBuild)
{
string workflowTestDir = Path.Combine(PathUtil.Resolve(GlobalSettingsFacade.AutoPackageInstallDirectory), "WorkflowTesting");
if (C1Directory.Exists(workflowTestDir))
{
Log.LogVerbose(LogTitle, string.Format("Installing packages from: {0}", workflowTestDir));
zipFiles.AddRange(C1Directory.GetFiles(workflowTestDir, "*.zip")
.OrderBy(f => f)
.Select(f => new AutoInstallPackageInfo { FilePath = f, ToBeDeleted = false }));
}
}
foreach (var zipFile in zipFiles)
{
try
{
using (Stream zipFileStream = C1File.OpenRead(zipFile.FilePath))
{
Log.LogVerbose(LogTitle, "Installing package: " + zipFile.FilePath);
PackageManagerInstallProcess packageManagerInstallProcess = PackageManager.Install(zipFileStream, true);
if (packageManagerInstallProcess.PreInstallValidationResult.Count > 0)
{
Log.LogError(LogTitleNormal, "Package installation failed! (Pre install validation error)");
LogErrors(packageManagerInstallProcess.PreInstallValidationResult);
continue;
}
List<PackageFragmentValidationResult> validationResults = packageManagerInstallProcess.Validate();
if (validationResults.Count > 0)
{
Log.LogError(LogTitleNormal, "Package installation failed! (Validation error)");
LogErrors(validationResults);
continue;
}
List<PackageFragmentValidationResult> installResult = packageManagerInstallProcess.Install();
if (installResult.Count > 0)
{
Log.LogError(LogTitleNormal, "Package installation failed! (Installation error)");
LogErrors(installResult);
continue;
}
}
}
catch (Exception ex)
{
Log.LogWarning(LogTitleNormal, ex);
}
if (zipFile.ToBeDeleted)
{
FileUtils.Delete(zipFile.FilePath);
}
}
}
catch (Exception ex)
{
Log.LogError(LogTitleNormal, ex);
}
}