public static InstalledPackage InstallLocalPackage(string packagePath, ProjectPackMan openProject, string _namespace, out LogDataList log, bool ignoreClash = false, bool alreadyCopiedToTemp = false, bool procEvents = true, bool skipFileExistenceCheck = false) { log = new LogDataList(); if (string.IsNullOrWhiteSpace(packagePath)) { try { throw new ArgumentNullException(ExceptionMessages.General.PACK_PATH_ARG_NULL); } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.PACKAGE_PATH_NULL, _namespace, ex, BasicDebugLogger.DebugErrorType.Error); throw; } } if (openProject == null || string.IsNullOrWhiteSpace(openProject.DirectoryPath)) { try { throw new ArgumentException(ExceptionMessages.General.OPEN_PROJ_ARG_OR_DIRPATH_NULL); } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.NO_OPEN_PROJECT, _namespace, ex, BasicDebugLogger.DebugErrorType.Error); throw; } } Logger.WriteInformationLog(InstallerMessages.Information.PACKAGE_INSTALL_START_L + packagePath + ".", _namespace); Exception outEx; LogDataList outLog = null; string oldPackagePath = packagePath; try { if (!alreadyCopiedToTemp) { packagePath = InitPackageInstaller(packagePath, false, _namespace, out outLog); } } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.INIT_ERROR + packagePath + ".", _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } log.AppendLogs(outLog); RMPackage package = null; try { package = new RMPackage(packagePath, _namespace, out outLog); } catch (Exception ex) { log.AppendLogs(outLog); Logger.WriteErrorLog(InstallerMessages.Error.XML_READ_ERROR + packagePath + ".", _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } log.AppendLogs(outLog); if (!skipFileExistenceCheck) { PerformPackageFilesExistenceCheck(package, _namespace, out outLog); if (outLog != null) { log.Logs.AddRange(outLog.Logs); } } if (!ignoreClash && openProject.InstalledPackages.FindByUID(package.UniqueID) != null) { try { throw new PackageAlreadyExistsException(ExceptionMessages.General.PackWIDExists(package.UniqueID)); } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.PACKAGE_ALREADY_EXISTS, _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } } if (procEvents && OnPackageInstallBegin != null) { OnPackageInstallBegin.Invoke(package, false, oldPackagePath, openProject); } try { PerformInstallLocal(package, openProject.DirectoryPath, _namespace); } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.INSTALL_PACK_FAILED, _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } string packManStorePath = openProject.DirectoryPath + "\\" + Vars.PACKAGE_MANAGER_DIRECTORY; if (!Directory.Exists(packManStorePath) && Helper.CreateFolderSafely(packManStorePath, _namespace, out outEx, LoggerMessages.GeneralError.CREATE_REQUIRED_DIR_FAILED_ARG) == CreateFolderResult.UserCancelled) { throw outEx; } InstalledPackage newInstall = null; try { newInstall = CreateLocalInstalledFile(package, Path.GetDirectoryName(packagePath), packManStorePath, _namespace, out outLog); openProject.InstalledPackages.AddSafely(newInstall); } catch { if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } if (outLog != null) { log.Logs.AddRange(outLog.Logs); } if (!alreadyCopiedToTemp) { CleanupTempInstallDir(_namespace, false); } if (procEvents && OnPackageInstalled != null) { OnPackageInstalled.Invoke(package, false, oldPackagePath, openProject); } Logger.WriteInformationLog(InstallerMessages.Information.PACKAGE_INSTALL_DONE_L, _namespace); return(newInstall); }
// -------- Global Packages -------- // public static InstalledPackage InstallGlobalPackage(string packagePath, string _namespace, out LogDataList log, bool ignoreClash = false, bool alreadyCopiedToTemp = false, bool procEvents = true, bool skipFileExistenceCheck = false) { Logger.WriteInformationLog(InstallerMessages.Information.PACKAGE_INSTALL_START_G + packagePath + ".", _namespace); log = new LogDataList(); string oldPackagePath = packagePath; LogDataList outLog = null; try { if (!alreadyCopiedToTemp) { packagePath = packagePath = InitPackageInstaller(packagePath, true, _namespace, out outLog); } } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.INIT_ERROR + packagePath + ".", _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } log.AppendLogs(outLog); RMPackage package = null; try { package = new RMPackage(packagePath, _namespace, out outLog); } catch (Exception ex) { log.AppendLogs(outLog); Logger.WriteErrorLog(InstallerMessages.Error.XML_READ_ERROR + packagePath + ".", _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } log.AppendLogs(outLog); if (!skipFileExistenceCheck) { PerformPackageFilesExistenceCheck(package, _namespace, out outLog); log.AppendLogs(outLog); } if (!ignoreClash && GlobalPackages.FindByUID(package.UniqueID) != null) { try { throw new PackageAlreadyExistsException(ExceptionMessages.General.PackWIDExists(package.UniqueID)); } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.PACKAGE_ALREADY_EXISTS, _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } } if (procEvents && OnPackageInstallBegin != null) { OnPackageInstallBegin.Invoke(package, true, oldPackagePath, null); } try { PerformInstallGlobal(package, _namespace); } catch (Exception ex) { Logger.WriteErrorLog(InstallerMessages.Error.INSTALL_PACK_FAILED, _namespace, ex, BasicDebugLogger.DebugErrorType.Error); if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } InstalledPackage newInstall = null; try { newInstall = CreateGlobalInstalledFile(package, Path.GetDirectoryName(packagePath), _namespace, out outLog); GlobalPackages.AddSafely(newInstall); } catch { if (procEvents) { CleanupTempInstallDir(_namespace, false); } throw; } log.AppendLogs(outLog); if (!alreadyCopiedToTemp) { CleanupTempInstallDir(_namespace, false); } if (OnPackageInstalled != null) { OnPackageInstalled.Invoke(package, true, oldPackagePath, null); } Logger.WriteInformationLog(InstallerMessages.Information.PACKAGE_INSTALL_DONE_G, _namespace); return(newInstall); }