/// <summary> /// Shows the confirmation prompt. /// </summary> /// <param name="package">The package.</param> /// <returns> /// Whether the user accepted the prompt. /// </returns> public bool ShowConfirmation(PluginPackage package) { using (var dialog = new ConfirmationDialog(package)) { return dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK; } }
public ConfirmationDialog(PluginPackage package) { InitializeComponent(); _package = package; InitializePackage(); }
static void MainWorker(object argsObject) { var args = (string[])argsObject; PluginPackage pluginInstall = null; if (args.Length == 1) { var fn = args[0]; if (Path.GetExtension(fn) == ".mfplug") { pluginInstall = PluginPackage.Load(fn); } } // First try and create a runtime. if (pluginInstall == null) { using (Extensibility.InitializeRuntimeComposition()) { var runtime = CompositionServices.CompositionContainer.GetExportedValues<IMonoflectorHost>().FirstOrDefault(); if (runtime != null) { runtime.Run((string[])argsObject); return; } } } // If that fails it means nothing has been set up. // Attempt to bootstrap. using (Extensibility.InitializeBootstrapComposition()) { _installer = CompositionServices.CompositionContainer.GetExportedValues<IPluginInstallation>().FirstOrDefault(); if (_installer == null) throw new Exception(string.Format(Properties.Resources.NoEnvironment, string.Join(", ", Extensibility.Environments))); if (pluginInstall == null) // Boostrap mode. { if (_installer.ShowBootstrapInterface()) { _installer.ShowInterface(); _bootstrapper = CompositionServices.CompositionContainer.GetExportedValues<IMonoflectorBootstrapper>(); var worker = new Thread(BootstrapWorker); worker.Start(); _installer.WaitForClose(); } } else // Plugin mode. { if (_installer.ShowConfirmation(_package = pluginInstall)) { _installer.ShowInterface(); var worker = new Thread(InstallerWorker); worker.Start(); _installer.WaitForClose(); } } } // Try again. using (Extensibility.InitializeRuntimeComposition()) { var runtime = CompositionServices.CompositionContainer.GetExportedValues<IMonoflectorHost>().FirstOrDefault(); if (runtime != null) { runtime.Run((string[])argsObject); } else { throw new Exception(string.Format(Properties.Resources.NoEnvironment, string.Join(", ", Extensibility.Environments))); } } }
/// <summary> /// Loads the specified package. /// </summary> /// <param name="filename">The filename.</param> /// <returns>The package.</returns> public static PluginPackage Load(string filename) { var tempDir = Path.GetTempFileName(); File.Delete(tempDir); Directory.CreateDirectory(tempDir); var file = ZipFile.Read(filename); foreach (var fn in file.EntryFileNames.Where(x => string.Compare(x, "manifest.xml", true) == 0 || string.Compare(Path.GetDirectoryName(x), "installDoc", true) == 0)) { file[fn].Extract(tempDir); } var package = new PluginPackage(); package._zipFile = file; package.TemporaryDirectory = tempDir; package.Load(); return package; }