public bool Launch(int timeout)
        {
            LogManager.Log(Logger, LogLevel.Information, _processStartInfo.FileName + " " + _processStartInfo.Arguments, "Launch command");

            try
            {
                using (Process process = Process.Start(_processStartInfo))
                {
                    bool success = process.WaitForExit(timeout * 1000);

                    DataOutput  = DataOutput.Append(process.StandardOutput.ReadToEnd());
                    ErrorOutput = ErrorOutput.Append(process.StandardError.ReadToEnd());

                    LogManager.Log(Logger, LogLevel.Debug, DataOutput.ToString(), "DEBUG");
                    LogManager.Log(Logger, LogLevel.Debug, ErrorOutput.ToString(), "DEBUG");

                    HasTimeout = !success;
                    ExitCode   = process.ExitCode;

                    if (HasTimeout)
                    {
                        LogManager.Log(Logger, LogLevel.Error, $"Le process n'a pas pu être exécuté dans le temps imparti.", "Timeout");
                        return(false);
                    }

                    if (ExitCode != 0)
                    {
                        LogManager.Log(Logger, LogLevel.Error, $"Le process n'a pas pu être exécuté correctement, erreur {process.ExitCode}.", "Error");
                        return(false);
                    }

                    return(true);
                }
            }
            catch (Exception ex)
            {
                LogManager.Log(Logger, LogLevel.Critical, $"Exception : Le process n'a pas pu être exécuté correctement : {ex}.", "Exception");
                return(false);
            }
        }