Example #1
0
        static void Main(string[] args)
        {
            try
            {
                Logging.LogManager.Initialize("Deployment");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Failed to initialize logger: {ex}");
#if DEBUG
                Console.ReadKey();
#endif
                ExitInstallation("Failed to intialize Logger", ExitCode.FailedToInitilizeLogger);
            }

            _logger.Info($"Initialized {Namespace} v{Version}");

            // This has to happen quite early as it can take some time for the eventlog to be fully registered
            _logger.Trace("Ensuring WindowsEventLog ...");
            WindowsEventLog.Ensure();

            _logger.Trace("Trying to read settings...");

            if (args.Length != 2)
            {
                ExitInstallation("Invalid command line arguments. Use: -i [XML] or -u [XML]", ExitCode.MissingRequiredParameter);
            }

            var settingsPath = Path.GetFullPath(args[1]);
            _logger.Trace($"Searching for settings file in {settingsPath}");

            if (!File.Exists(settingsPath))
            {
                ExitInstallation("settings.xml is missing!", ExitCode.SettingsFileMissing);
            }

            var arguments        = args.ToList();
            var isInstallation   = arguments.Any(argument => argument.ToLower() == "--install" || argument.ToLower() == "-i");
            var isUninstallation = arguments.Any(argument => argument.ToLower() == "--uninstall" || argument.ToLower() == "-u");

            DeploymentEnvironmentVariables.RootDirectory = Path.GetDirectoryName(settingsPath);
            _logger.Info($"DeploymentRootDirectory: {DeploymentEnvironmentVariables.RootDirectory}");

            EnvironmentVariables.Configuration = ReadXml <Configuration>(settingsPath);
            _logger.Trace("Successfully read settings");

            _logger.Info("Verifying install dependencies ...");
            _logger.Info($"IsAdministrator: {EnvironmentVariables.IsAdministrator}");
            _logger.Info($"IsElevated: {EnvironmentVariables.IsElevated}");
            if (!EnvironmentVariables.IsElevated)
            {
                ExitInstallation("Program has to be run as Administrator to function properly!", ExitCode.NotElevated);
            }

            try
            {
                _logger.Info($"DT-Installation Path: {EnvironmentVariables.DeploymentToolkitInstallPath}");
            }
            catch (DeploymentToolkitInstallPathNotFoundException)
            {
                ExitInstallation($"Could not get installation path of the deployment toolkit", ExitCode.DeploymentToolkitInstallPathNotFound);
            }

            _logger.Trace("Reading deployment settings ...");
            ApplyGlobalSettings();

            _logger.Trace("Parsing command line arguments...");

            if (isInstallation)
            {
                Install();
            }
            else
            {
                if (isUninstallation)
                {
                    Uninstall();
                }
                else
                {
                    ExitInstallation("Failed to install or uninstall. Neither install nor uninstall command line has been specified", ExitCode.MissingRequiredParameter);
                }
            }

            _logger.Info($"Ended {Namespace} v{Version}");
#if DEBUG
            Console.ReadKey();
#endif
            Environment.Exit(GlobalExitCode);
        }