예제 #1
0
        private bool InstallOrUninstall(IList <string> installerIds, IElevationContext elevationContext, IProgressMonitor progressMonitor,
                                        InstallerOperation operation)
        {
            if (progressMonitor == null)
            {
                throw new ArgumentNullException("progressMonitor");
            }

            var filteredInstallerHandles = FilterInstallers(installerIds);

            using (progressMonitor.BeginTask(operation == InstallerOperation.Install ? "Installing components." : "Uninstalling components.",
                                             filteredInstallerHandles.Count + 1))
            {
                if (progressMonitor.IsCanceled)
                {
                    return(false);
                }

                if (elevationContext != null ||
                    elevationManager.HasElevatedPrivileges ||
                    !IsElevationRequired(filteredInstallerHandles))
                {
                    return(InstallOrUninstallWithElevationContext(filteredInstallerHandles, elevationContext, progressMonitor, operation));
                }

                return(elevationManager.TryElevate(
                           newElevationContext => InstallOrUninstallWithElevationContext(filteredInstallerHandles, newElevationContext, progressMonitor, operation),
                           "Administrative access required to install or uninstall certain components."));
            }
        }
예제 #2
0
        private static bool InstallOrUninstallWithElevationContext(IEnumerable <ComponentHandle <IInstaller, InstallerTraits> > installerHandles,
                                                                   IElevationContext elevationContext, IProgressMonitor progressMonitor,
                                                                   InstallerOperation operation)
        {
            foreach (var installerHandle in installerHandles)
            {
                if (progressMonitor.IsCanceled)
                {
                    return(false);
                }

                IProgressMonitor subProgressMonitor = progressMonitor.CreateSubProgressMonitor(1);
                if (elevationContext != null && installerHandle.GetTraits().RequiresElevation)
                {
                    elevationContext.Execute(InstallerElevatedCommand.ElevatedCommandId,
                                             new InstallerElevatedCommand.Arguments(installerHandle.Id, operation),
                                             subProgressMonitor);
                }
                else
                {
                    IInstaller installer = installerHandle.GetComponent();

                    if (operation == InstallerOperation.Install)
                    {
                        installer.Install(progressMonitor.CreateSubProgressMonitor(1));
                    }
                    else
                    {
                        installer.Uninstall(progressMonitor.CreateSubProgressMonitor(1));
                    }
                }
            }

            return(true);
        }
        private static bool InstallOrUninstallWithElevationContext(IEnumerable<ComponentHandle<IInstaller, InstallerTraits>> installerHandles,
            IElevationContext elevationContext, IProgressMonitor progressMonitor,
            InstallerOperation operation)
        {
            foreach (var installerHandle in installerHandles)
            {
                if (progressMonitor.IsCanceled)
                    return false;

                IProgressMonitor subProgressMonitor = progressMonitor.CreateSubProgressMonitor(1);
                if (elevationContext != null && installerHandle.GetTraits().RequiresElevation)
                {
                    elevationContext.Execute(InstallerElevatedCommand.ElevatedCommandId,
                        new InstallerElevatedCommand.Arguments(installerHandle.Id, operation),
                        subProgressMonitor);
                }
                else
                {
                    IInstaller installer = installerHandle.GetComponent();

                    if (operation == InstallerOperation.Install)
                        installer.Install(progressMonitor.CreateSubProgressMonitor(1));
                    else
                        installer.Uninstall(progressMonitor.CreateSubProgressMonitor(1));
                }
            }

            return true;
        }
 private void RestorePackages()
 {
     foreach (var package in this.project.PackageRepository.GetAll())
     {
         this.Operation = InstallerOperation.Install;
         this.PerformOperation(package);
     }
 }
예제 #5
0
            /// <summary>
            /// Creates the arguments.
            /// </summary>
            /// <param name="installerId">The installer id.</param>
            /// <param name="installerOperation">The requested installer operation.</param>
            /// <exception cref="ArgumentNullException">Thrown if <paramref name="installerId"/> is null.</exception>
            public Arguments(string installerId, InstallerOperation installerOperation)
            {
                if (installerId == null)
                {
                    throw new ArgumentNullException("installerId");
                }

                this.installerId        = installerId;
                this.installerOperation = installerOperation;
            }
예제 #6
0
        private async Task <BuildResult?> BuildData(string id, InstallerOperation operation)
        {
            try
            {
                var file = await operation.BuilderFunc(s => _dataServer.Value.Send(operation.EndpointId, NetworkMessage.Create(NetworkOperation.Message, Encoding.UTF8.GetBytes(s))),
                                                       id, operation.EndpointId);

                if (file == null)
                {
                    SendDeny(operation.EndpointId);
                }

                return(file);
            }
            catch (Exception e)
            {
                LogMessage("Error on Transmiting Data {Id} {Error}", id, e.Message);
                SendDeny(operation.EndpointId);
            }

            return(null);
        }
        private bool InstallOrUninstall(IList<string> installerIds, IElevationContext elevationContext, IProgressMonitor progressMonitor,
            InstallerOperation operation)
        {
            if (progressMonitor == null)
                throw new ArgumentNullException("progressMonitor");

            var filteredInstallerHandles = FilterInstallers(installerIds);

            using (progressMonitor.BeginTask(operation == InstallerOperation.Install ? "Installing components." : "Uninstalling components.",
                filteredInstallerHandles.Count + 1))
            {
                if (progressMonitor.IsCanceled)
                    return false;

                if (elevationContext != null
                    || elevationManager.HasElevatedPrivileges
                    || ! IsElevationRequired(filteredInstallerHandles))
                {
                    return InstallOrUninstallWithElevationContext(filteredInstallerHandles, elevationContext, progressMonitor, operation);
                }

                return elevationManager.TryElevate(
                    newElevationContext => InstallOrUninstallWithElevationContext(filteredInstallerHandles, newElevationContext, progressMonitor, operation),
                    "Administrative access required to install or uninstall certain components.");
            }
        }