Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save PetersonDave/4156998 to your computer and use it in GitHub Desktop.
Save PetersonDave/4156998 to your computer and use it in GitHub Desktop.
Pulled directly from Sitecore.Rocks.dll for installing packages -- check out "BehaviourOptions" to specify installation options.
using Sitecore;
using Sitecore.Data.Engines;
using Sitecore.Data.Proxies;
using Sitecore.Install;
using Sitecore.Install.Files;
using Sitecore.Install.Framework;
using Sitecore.Install.Items;
using Sitecore.Install.Metadata;
using Sitecore.Install.Utils;
using Sitecore.Install.Zip;
using Sitecore.IO;
using Sitecore.SecurityModel;
namespace Sitecore.Rocks.Server.Packages
{
public class PackageInstaller
{
public string FileName { get; private set; }
public PackageInstaller(string fileName)
{
this.FileName = fileName;
}
public void Install()
{
Context.SetActiveSite("shell");
using (new SecurityDisabler())
{
using (new ProxyDisabler())
{
using (new SyncOperationContext())
{
IProcessingContext context = (IProcessingContext) new SimpleProcessingContext();
IItemInstallerEvents instance1 = (IItemInstallerEvents) new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear));
context.AddAspect<IItemInstallerEvents>(instance1);
IFileInstallerEvents instance2 = (IFileInstallerEvents) new DefaultFileInstallerEvents(true);
context.AddAspect<IFileInstallerEvents>(instance2);
Installer installer = new Installer();
installer.InstallPackage(FileUtil.MapPath(this.FileName), context);
ISource<PackageEntry> source = (ISource<PackageEntry>) new PackageReader(FileUtil.MapPath(this.FileName));
IProcessingContext previewContext = Installer.CreatePreviewContext();
MetadataView view = new MetadataView(previewContext);
MetadataSink metadataSink = new MetadataSink(view);
metadataSink.Initialize(previewContext);
source.Populate((ISink<PackageEntry>) metadataSink);
installer.ExecutePostStep(view.PostStep, previewContext);
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment