public override void InstallPackage(Stream packageStream) { lock (thisLock) { if (!Exists) { throw new DatabaseNotFoundException($"Local Database not found at '{localDatabasePath}'"); } var package = PackageReader.GetManifestFromPackageStream(packageStream); var localDatabaseConfig = GetLocalDatabaseConfig(); var installedPackage = localDatabaseConfig.Packages.SingleOrDefault(p => p.Name == package.Name); if (installedPackage != null) { if (installedPackage.Version != package.Version) { var p = packageCache.GetPackages().FindByNameAndVersion(new Package { Name = installedPackage.Name, Version = installedPackage.Version }); if (p == null) { throw new Exception($"Old Package '{installedPackage.Name}' Version:'{installedPackage.Version}' not found!"); } UninstallPackage(p); } } localDatabaseConfig.Packages.Add(new LocalDatabasePackageInfo { Name = package.Name, Version = package.Version }); localDatabaseConfig.Save(localDatabaseConfigFile); var files = packageInstaller.InstallPackageStream(packageStream, WoTHome); packageCache.AddPackage(package, files); } }