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); }