public ActionResult InstallLocally(string redirectUrl) { if (_shellSettings.Name != ShellSettings.DefaultName || !Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to install packages"))) return new HttpUnauthorizedResult(); var httpPostedFileBase = Request.Files.Get(0); if (httpPostedFileBase == null || Request.Files.Count == 0 || string.IsNullOrWhiteSpace(httpPostedFileBase.FileName)) { throw new OrchardException(T("Select a file to upload.")); } try { string fullFileName = Path.Combine(_appDataFolderRoot.RootFolder, Path.GetFileName(httpPostedFileBase.FileName)).Replace(Path.DirectorySeparatorChar, '/'); httpPostedFileBase.SaveAs(fullFileName); var package = new ZipPackage(fullFileName); PackageInfo packageInfo = _packageManager.Install(package, _appDataFolderRoot.RootFolder, MapAppRoot()); ExtensionDescriptor extensionDescriptor = package.GetExtensionDescriptor(packageInfo.ExtensionType); System.IO.File.Delete(fullFileName); if (DefaultExtensionTypes.IsTheme(extensionDescriptor.ExtensionType)) { Services.Notifier.Information(T("The theme has been successfully installed. It can be enabled in the \"Themes\" page accessible from the menu.")); } else if (DefaultExtensionTypes.IsModule(extensionDescriptor.ExtensionType)) { Services.Notifier.Information(T("The module has been successfully installed.")); return InstallPackageDetails(extensionDescriptor, redirectUrl); } } catch (OrchardException e) { Services.Notifier.Error(T("Package uploading and installation failed: {0}", e.Message)); return View("InstallPackageFailed"); } catch (Exception) { Services.Notifier.Error(T("Package uploading and installation failed.")); return View("InstallPackageFailed"); } return Redirect(redirectUrl); }