/// <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();
 }
Exemple #3
0
        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;
        }