示例#1
0
        protected virtual async Task <bool> CallCommandAsync(string argument, string cwd)
        {
            ProcessStartInfo start = new ProcessStartInfo
            {
                WorkingDirectory       = cwd,
                UseShellExecute        = false,
                WindowStyle            = ProcessWindowStyle.Hidden,
                CreateNoWindow         = true,
                FileName               = "cmd.exe",
                Arguments              = argument,
                RedirectStandardError  = true,
                RedirectStandardOutput = true,
                StandardErrorEncoding  = Encoding.UTF8,
                StandardOutputEncoding = Encoding.UTF8,
            };

            ModifyPathVariable(start);

            try
            {
                using (var p = System.Diagnostics.Process.Start(start))
                {
                    var error = await p.StandardError.ReadToEndAsync();

                    var output = await p.StandardOutput.ReadToEndAsync();

                    p.WaitForExit();

                    Logger.Log(output, true);

                    if (p.ExitCode == 0)
                    {
                        await PackageInstallerPackage.UpdateStatus("Package installed");
                    }
                    else
                    {
                        await PackageInstallerPackage.UpdateStatus("An error installing package. See output window for details");

                        Logger.Log(error, true);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                await PackageInstallerPackage.UpdateStatus("An error installing package. See output window for details");

                Logger.Log(ex, true);
                return(false);
            }
        }
        private async void ShowInstallDialogAsync(object sender, EventArgs e)
        {
            var     dte     = (DTE)ServiceProvider.GetService(typeof(DTE));
            Project project = _project ?? ProjectHelpers.GetSelectedProject() ?? GetActiveDocumentProject(dte);

            if (project == null)
            {
                return;
            }

            InstallDialog dialog = new InstallDialog(ServiceProvider, new Bower(), new Jspm(), new Npm(), new NuGet(), new Tsd(), new Typings(), new Yarn());

            var hwnd = new IntPtr(dte.MainWindow.HWnd);

            System.Windows.Window window = (System.Windows.Window)HwndSource.FromHwnd(hwnd).RootVisual;
            dialog.Owner = window;

            var result = dialog.ShowDialog();

            if (!dialog.DialogResult.HasValue || !dialog.DialogResult.Value)
            {
                return;
            }

            try
            {
                await PackageInstallerPackage.AnimateStatusBar(true);

                await PackageInstallerPackage.UpdateStatus($"Installing {dialog.Package} package from {dialog.Provider.Name}...");

                Logger.Log($"Installing {dialog.Package} package from {dialog.Provider.Name}...");

                await dialog.Provider.InstallPackage(project, dialog.Package, dialog.Version, dialog.Arguments);
            }
            finally
            {
                await PackageInstallerPackage.AnimateStatusBar(false);

                await PackageInstallerPackage.HideStatus(3000);
            }
        }
示例#3
0
        public override async Task <bool> InstallPackage(Project project, string packageName, string version, string args = null)
        {
            var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
            var installer      = componentModel.GetService <IVsPackageInstaller>();

            return(await System.Threading.Tasks.Task.Run(async() =>
            {
                try
                {
                    installer.InstallPackage(null, project, packageName, (Version)null, false);
                    await PackageInstallerPackage.UpdateStatusAsync("Package installed");
                    return true;
                }
                catch (Exception ex)
                {
                    await PackageInstallerPackage.UpdateStatusAsync("An error installing package. See output window for details");
                    Logger.Log(ex);
                    return false;
                }
            }));
        }