/// <summary>
        /// Initializes various basic systems like the client's logger,
        /// constants, and the general exception handler.
        /// Reads the user's settings from an INI file,
        /// checks for necessary permissions and starts the client if
        /// everything goes as it should.
        /// </summary>
        /// <param name="parameters">The client's startup parameters.</param>
        public static void Initialize(StartupParams parameters)
        {
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(HandleExcept);

            Environment.CurrentDirectory = ProgramConstants.GamePath;

            CheckPermissions();

            Logger.Initialize(ProgramConstants.GamePath + "Client/", "client.log");
            Logger.WriteLogFile = true;

            if (!Directory.Exists(ProgramConstants.GamePath + "Client"))
            {
                Directory.CreateDirectory(ProgramConstants.GamePath + "Client");
            }

            File.Delete(ProgramConstants.GamePath + "Client/client.log");

            MainClientConstants.Initialize();

            Logger.Log("***Logfile for " + MainClientConstants.GAME_NAME_LONG + " client***");
            Logger.Log("Client version: " + Application.ProductVersion);

            // Log information about given startup params
            if (parameters.NoAudio)
            {
                Logger.Log("Startup parameter: No audio");
            }

            if (parameters.MultipleInstanceMode)
            {
                Logger.Log("Startup parameter: Allow multiple client instances");
            }

            parameters.UnknownStartupParams.ForEach(p => Logger.Log("Unknown startup parameter: " + p));

            Logger.Log("Loading settings.");

            UserINISettings.Initialize(ClientConfiguration.Instance.SettingsIniName);

            // Delete obsolete files from old target project versions

            File.Delete(ProgramConstants.GamePath + "mainclient.log");
            File.Delete(ProgramConstants.GamePath + "launchupdt.dat");
            try
            {
                File.Delete(ProgramConstants.GamePath + "wsock32.dll");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Deleting wsock32.dll failed! Please close any " +
                                "applications that could be using the file, and then start the client again."
                                + Environment.NewLine + Environment.NewLine +
                                "Message: " + ex.Message,
                                "CnCNet Client");
                Environment.Exit(0);
            }

            Application.EnableVisualStyles();

            new Startup().Execute();
        }
        public static void Initialize(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(HandleExcept);

            Environment.CurrentDirectory = MainClientConstants.gamepath;

            CheckPermissions();

            Logger.Initialize(MainClientConstants.gamepath + "Client\\", "client.log");
            Logger.WriteLogFile = true;

            if (!Directory.Exists(MainClientConstants.gamepath + "Client"))
            {
                Directory.CreateDirectory(MainClientConstants.gamepath + "Client");
            }

            File.Delete(MainClientConstants.gamepath + "Client\\client.log");

            MainClientConstants.Initialize();

            Logger.Log("***Logfile for " + MainClientConstants.GAME_NAME_LONG + " client***");
            Logger.Log("Client version: " + Application.ProductVersion);

            Logger.Log("Loading settings.");

            UserINISettings.Initialize(ClientConfiguration.Instance.SettingsIniName);

            // Delete obsolete files from old target project versions

            File.Delete(MainClientConstants.gamepath + "mainclient.log");
            File.Delete(MainClientConstants.gamepath + "launchupdt.dat");
            try
            {
                File.Delete(MainClientConstants.gamepath + "wsock32.dll");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Deleting wsock32.dll failed! Please close any applications that could be using the file, and then start the client again." + Environment.NewLine + Environment.NewLine +
                                "Message: " + ex.Message,
                                "CnCNet Client");
                Environment.Exit(0);
            }

            Application.EnableVisualStyles();

            int argsLength = args.GetLength(0);

            for (int arg = 0; arg < argsLength; arg++)
            {
                string argument = args[arg].ToUpper();

                switch (argument)
                {
                case "-NOAUDIO":
                    AudioMaster.DisableSounds = true;
                    Logger.Log("Startup parameter: Audio disabled");
                    break;

                default:
                    Logger.Log("Unknown startup parameter: " + argument);
                    break;
                }
            }

            new Startup().Execute();
        }