Beispiel #1
0
        private void InstallComponent(int index, Pipes.StreamString pipeStream)
        {
            pipeStream.WriteString("[Component]" + components[index].Name);
            // Subscribe to the ProgressUpdate event, and update the installer pages' progress bar
            components[index].ProgressUpdate += delegate(object sender, ProgressUpdateEventArgs e)
            {
                pipeStream.WriteString("[Progress]" + e.Percent);
            };
            components[index].StatusUpdate += delegate(object sender, StatusUpdateEventArgs e)
            {
                pipeStream.WriteString("[Status]" + e.Status);
            };
            components[index].InstallComplete += delegate(object sender, EventArgs e)
            {
                if (index + 1 < components.Count)
                {
                    InstallComponent(index + 1, pipeStream);
                }
                else
                {
                    if (InstallComplete != null)
                    {
                        InstallComplete(this, EventArgs.Empty);
                    }
                }
            };
            switch (Mode)
            {
            case InstallMode.Install: {
                components[index].Install();
            }
            break;

            case InstallMode.Repair: {
                components[index].Repair(destinationDirectory);
            }
            break;
            }
        }
        public static void RunProperMode(Command command)
        {
            if (command.ContainsCommandArg("/Uninstall"))   // Are we in uninstall-mode?
            {
                UninstallHelper uninstallHelper = new UninstallHelper();
                uninstallHelper.RunUninstall();
            }
            else if (command.ContainsCommandArg("-silentinstall"))
            {
                Globals.InPortableMode  = command["-portable"].ToBool();
                Globals.IsSilentInstall = true;
                NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "www.pmuniverse.net-installer", PipeDirection.InOut, PipeOptions.None, System.Security.Principal.TokenImpersonationLevel.Impersonation);
                pipeClient.Connect();
                Pipes.StreamString clientStream = new Pipes.StreamString(pipeClient);
                Globals.SilentInstallCommunicationPipeStream = clientStream;
                Globals.SilentInstallCommunicationPipe       = pipeClient;
                installWaitEvent = new ManualResetEvent(false);
                Installer installer = new Installer(command);
                installer.InstallComplete += new EventHandler(installer_InstallComplete);
                installer.Install(clientStream);

                installWaitEvent.WaitOne();

                clientStream.WriteString("[InstallComplete]");

                pipeClient.WaitForPipeDrain();
                pipeClient.Close();

                System.Environment.Exit(0);
            }
            else
            {
                // There are no special command line arguments, run the installer in install mode
                // Let's check if we elevated ourselves
                if (!Globals.CommandLine.ContainsCommandArg("/skipwelcome") || !VistaSecurity.IsAdmin())
                {
                    // Show the welcome page
                    PageManager.ActivePage = new Pages.pgeWelcome();
                }
                else
                {
                    // Show the license page
                    PageManager.ActivePage = new Pages.pgeLicense();
                }
            }
        }
        public static void RunProperMode(Command command)
        {
            if (command.ContainsCommandArg("/Uninstall")) { // Are we in uninstall-mode?
                UninstallHelper uninstallHelper = new UninstallHelper();
                uninstallHelper.RunUninstall();
            } else if (command.ContainsCommandArg("-silentinstall")) {
                Globals.InPortableMode = command["-portable"].ToBool();
                Globals.IsSilentInstall = true;
                NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "www.pmuniverse.net-installer", PipeDirection.InOut, PipeOptions.None, System.Security.Principal.TokenImpersonationLevel.Impersonation);
                pipeClient.Connect();
                Pipes.StreamString clientStream = new Pipes.StreamString(pipeClient);
                Globals.SilentInstallCommunicationPipeStream = clientStream;
                Globals.SilentInstallCommunicationPipe = pipeClient;
                installWaitEvent = new ManualResetEvent(false);
                Installer installer = new Installer(command);
                installer.InstallComplete += new EventHandler(installer_InstallComplete);
                installer.Install(clientStream);

                installWaitEvent.WaitOne();

                clientStream.WriteString("[InstallComplete]");

                pipeClient.WaitForPipeDrain();
                pipeClient.Close();

                System.Environment.Exit(0);
            } else {
                // There are no special command line arguments, run the installer in install mode
                // Let's check if we elevated ourselves
                if (!Globals.CommandLine.ContainsCommandArg("/skipwelcome") || !VistaSecurity.IsAdmin()) {
                    // Show the welcome page
                    PageManager.ActivePage = new Pages.pgeWelcome();
                } else {
                    // Show the license page
                    PageManager.ActivePage = new Pages.pgeLicense();
                }
            }
        }