Example #1
0
		private static void Main(string[] args)
		{
			// System.Diagnostics.Debugger.Launch();

			try
			{
				// args[0]: the name of the event that must be signalled when the installer is ready to install
				// args[1]: name of the package file to use
				// args[2]: either 0 or 1. If 0, the installation should take place silently. If 1, the installer window should be visible." +
				// args[3]: integer, designates the number of seconds before the installer window is closed after a sucessfull installation" +
				// args[4]: either 0 or 1, if 1 then Altaxo should be restarted after installation. Furthermore, Bit1=1 indicates that this process was started with elevated privileges.
				// args[5]: argument full name of the Altaxo executable
				// args[6]: and more arguments: the original arguments of the Altaxo executable

				if (args.Length < 6)
				{
					StartVisualAppWithErrorMessage(null,
						"Programm called with less than 4 arguments, but at least 4 arguments are required:\r\n\r\n" +
						"args[0]: name of the event the installer is signalling when it is ready to install\r\n" +
						"args[1]: full path to the auto update package file\r\n" +
						"args[2]: either 0 or 1. If 0, the installer window will be hidden. If 1, the installer window is visible." +
						"args[3]: integer, designates the number of seconds before the installer window is closed after a sucessfull installation" +
						"args[4]: either 0,1, or 2. If 1, Altaxo is restarted after the installation is finished. A value of 2 is an indication that this program was started with elevated privileges\r\n" +
						"args[5]: full path to the old Altaxo executable\r\n" +
						"args[6..n]: arguments that will be used to restart Altaxo (if args[4] is 1)\r\n"
						);
					return;
				}

				// try to set the current directory to this of the entry assembly in order to not block the removing of the Altaxo directories
				try { System.Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); }
				catch (Exception) { }

				string eventName = args[0];
				string packageFullFileName = args[1];
				bool showInstallationWindow = 0 != int.Parse(args[2], System.Globalization.CultureInfo.InvariantCulture);
				int timeoutAfterSuccessfullInstallation = int.Parse(args[3], System.Globalization.CultureInfo.InvariantCulture);
				int options = int.Parse(args[4], System.Globalization.CultureInfo.InvariantCulture);
				string fullPathOfTheAltaxoExecutable = args[5];
				bool wasStartedWithElevatedPrivileges = 0 != (options & 2);
				bool restartAltaxo = (0 != (options & 1)) && !wasStartedWithElevatedPrivileges;

				var installer = new UpdateInstaller(eventName, packageFullFileName, fullPathOfTheAltaxoExecutable);
				if (installer.PackListFileExists())
				{
					if (installer.PackListFileIsWriteable())
					{
						StartVisualApp(installer, showInstallationWindow, timeoutAfterSuccessfullInstallation);
					}
					else // Package file is not writetable
					{
						if (0 != (options & 2)) // do we have already elevated privileges?
						{
							StartVisualAppWithErrorMessage(eventName,
								string.Format(ErrorIntroduction + "There is still no write access to the package file of the old installation, try to update again later!"));
							return; // returns is ok here, no need to restart Altaxo since we run with elevated privileges
						}
						else
						{
							// Start a new process with elevated privileges and wait for exit
							var proc = new System.Diagnostics.ProcessStartInfo();
							proc.FileName = System.Reflection.Assembly.GetEntryAssembly().Location;
							args[4] = "2";
							var stb = new StringBuilder();
							foreach (var s in args)
								stb.AppendFormat("\"{0}\"\t", s);

							proc.Arguments = stb.ToString();
							proc.Verb = "runas";
							var runProcWithElevated = System.Diagnostics.Process.Start(proc);

							if (restartAltaxo)
								runProcWithElevated.WaitForExit();
						}
					}
				}
				else // package file don't exist
				{
					StartVisualAppWithErrorMessage(eventName, string.Format("{0}Package file of old installation was not found (file: {1})!\r\nPlease reinstall Altaxo manually!", ErrorIntroduction, installer.PackListFileFullName));
				}

				if (restartAltaxo)
				{
					StringBuilder stb = new StringBuilder();
					for (int i = 6; i < args.Length; ++i)
						stb.AppendFormat("\"{0}\"\t", args[i]);
					System.Diagnostics.Process.Start(args[5], stb.ToString());
				}
			}
			catch (Exception ex)
			{
				StartVisualAppWithErrorMessage(args[0], string.Format("{0}{1}", ex.GetType().ToString(), ex.ToString()));
			}
		}
Example #2
0
        private static void Main(string[] args)
        {
            try
            {
                // args[0]: the name of the event that must be signalled when the installer is ready to install
                // args[1]: name of the package file to use
                // args[2]: either 0 or 1. If 0, the installation should take place silently. If 1, the installer window should be visible." +
                // args[3]: integer, designates the number of seconds before the installer window is closed after a sucessfull installation" +
                // args[4]: either 0 or 1, if 1 then Altaxo should be restarted after installation. Furthermore, Bit1=1 indicates that this process was started with elevated privileges.
                // args[5]: argument full name of the Altaxo executable
                // args[6]: and more arguments: the original arguments of the Altaxo executable

                if (args.Length < 6)
                {
                    StartVisualAppWithErrorMessage(null,
                                                   "Programm called with less than 4 arguments, but at least 4 arguments are required:\r\n\r\n" +
                                                   "args[0]: name of the event the installer is signalling when it is ready to install\r\n" +
                                                   "args[1]: full path to the auto update package file\r\n" +
                                                   "args[2]: either 0 or 1. If 0, the installer window will be hidden. If 1, the installer window is visible." +
                                                   "args[3]: integer, designates the number of seconds before the installer window is closed after a sucessfull installation" +
                                                   "args[4]: either 0,1, or 2. If 1, Altaxo is restarted after the installation is finished. A value of 2 is an indication that this program was started with elevated privileges\r\n" +
                                                   "args[5]: full path to the old Altaxo executable\r\n" +
                                                   "args[6..n]: arguments that will be used to restart Altaxo (if args[4] is 1)\r\n"
                                                   );
                    return;
                }

                // try to set the current directory to this of the entry assembly in order to not block the removing of the Altaxo directories
                try
                { System.Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); }
                catch (Exception) { }

                string eventName              = args[0];
                string packageFullFileName    = args[1];
                bool   showInstallationWindow = 0 != int.Parse(args[2], System.Globalization.CultureInfo.InvariantCulture);
                int    timeoutAfterSuccessfullInstallation = int.Parse(args[3], System.Globalization.CultureInfo.InvariantCulture);
                int    options = int.Parse(args[4], System.Globalization.CultureInfo.InvariantCulture);
                string fullPathOfTheAltaxoExecutable    = args[5];
                bool   wasStartedWithElevatedPrivileges = 0 != (options & 2);
                bool   restartAltaxo = (0 != (options & 1)) && !wasStartedWithElevatedPrivileges;

                var installer = new UpdateInstaller(eventName, packageFullFileName, fullPathOfTheAltaxoExecutable);
                if (installer.PackListFileExists())
                {
                    if (installer.PackListFileIsWriteable())
                    {
                        StartVisualApp(installer, showInstallationWindow, timeoutAfterSuccessfullInstallation);
                    }
                    else // Package file is not writetable
                    {
                        if (0 != (options & 2)) // do we have already elevated privileges?
                        {
                            StartVisualAppWithErrorMessage(eventName,
                                                           string.Format(ErrorIntroduction + "There is still no write access to the package file of the old installation, try to update again later!"));
                            return; // returns is ok here, no need to restart Altaxo since we run with elevated privileges
                        }
                        else
                        {
                            // Start a new process with elevated privileges and wait for exit
                            var proc = new System.Diagnostics.ProcessStartInfo
                            {
                                FileName = System.Reflection.Assembly.GetEntryAssembly().Location
                            };
                            args[4] = "2";
                            var stb = new StringBuilder();
                            foreach (var s in args)
                            {
                                stb.AppendFormat("\"{0}\"\t", s);
                            }

                            proc.Arguments = stb.ToString();
                            proc.Verb      = "runas";
                            var runProcWithElevated = System.Diagnostics.Process.Start(proc);

                            if (restartAltaxo)
                            {
                                runProcWithElevated.WaitForExit();
                            }
                        }
                    }
                }
                else // package file don't exist
                {
                    StartVisualAppWithErrorMessage(eventName, string.Format("{0}Package file of old installation was not found (file: {1})!\r\nPlease reinstall Altaxo manually!", ErrorIntroduction, installer.PackListFileFullName));
                }

                if (restartAltaxo)
                {
                    var stb = new StringBuilder();
                    for (int i = 6; i < args.Length; ++i)
                    {
                        stb.AppendFormat("\"{0}\"\t", args[i]);
                    }
                    System.Diagnostics.Process.Start(args[5], stb.ToString());
                }
            }
            catch (Exception ex)
            {
                StartVisualAppWithErrorMessage(args[0], string.Format("{0}{1}", ex.GetType().ToString(), ex.ToString()));
            }
        }