public bool? CompressFileGeoDB(string FileGeodatabase)
        {
            System.Collections.Generic.IEnumerable<ESRI.ArcGIS.RuntimeInfo> runtimeInfo              = null;
              ESRI.ArcGIS.esriSystem.IVariantArray                            geoprocessorVariantArray = null;
              ESRI.ArcGIS.Geoprocessing.GeoProcessor                          compressGeoprocessor     = null;

              try
              {
            //  Make sure the File Geodatabase exists before attempting to uncompress it.
            if (!System.IO.Directory.Exists(FileGeodatabase))
            {
              //  Let the user know that the File Geodatabase does not exist.
              if (ErrorMessage != null)
              {
            ErrorMessage("The File Geodatabase - " + FileGeodatabase.ToUpper() + " does not exist and thus was not compressed...");
              }

              //  Return FALSE to the calling routine to indicate that this process failed.
              return false;

            }

            //  Let the user know what is happening.
            if (ProcessMessage != null)
            {
              ProcessMessage("      - Attempting to compress the File Geodatabase - " + FileGeodatabase.ToUpper() + "...");
            }

            //  Determine the Install Path for the ArcGIS Software.
            runtimeInfo = ESRI.ArcGIS.RuntimeManager.InstalledRuntimes;
            string arcToolboxPath = null;
            foreach (ESRI.ArcGIS.RuntimeInfo currentRuntimeItem in runtimeInfo)
            {
              //  Retrieve the Install Path for the ArcGIS Desktop Runtime (ArcGIS Toolbox Items
              //  are found in this path).
              if (currentRuntimeItem.Product == ESRI.ArcGIS.ProductCode.Desktop)
              {
            arcToolboxPath = currentRuntimeItem.Path;
              }

            }

            //  If the ArcToolBox Directory Exists, add it to the Path.
            if (System.IO.Directory.Exists(System.IO.Path.Combine(arcToolboxPath, @"ArcToolbox")))
            {
              arcToolboxPath = System.IO.Path.Combine(arcToolboxPath, @"ArcToolbox");
            }

            //  If the Toolboxes Directory Exists, add it to the Path.
            if (System.IO.Directory.Exists(System.IO.Path.Combine(arcToolboxPath, @"Toolboxes")))
            {
              arcToolboxPath = System.IO.Path.Combine(arcToolboxPath, @"Toolboxes");
            }

            //  If the Toolbox File Exists, add it to the Toolbox path.
            if (System.IO.File.Exists(System.IO.Path.Combine(arcToolboxPath, "Data Management Tools.tbx")))
            {
              //  Add the File Name to the path.
              arcToolboxPath = System.IO.Path.Combine(arcToolboxPath, "Data Management Tools.tbx");
            }

            //  Build the Geoprocessor Variant Array that will pass the arguments to the Geoprocessing Tool.
            geoprocessorVariantArray = new ESRI.ArcGIS.esriSystem.VarArrayClass();
            geoprocessorVariantArray.Add(FileGeodatabase);

            //  Initialize the Geoprocessing Object that will be used to compress the Geodatabase.
            compressGeoprocessor = new ESRI.ArcGIS.Geoprocessing.GeoProcessor();
            compressGeoprocessor.AddToolbox(arcToolboxPath);

            try
            {
              //  Perform the export.
              compressGeoprocessor.Execute("CompressFileGeodatabaseData_management", geoprocessorVariantArray, null);
              //  Write the messages from the Compress Tool to the log file.
              if (ProcessMessage != null)
              {
            int toolMessageCount = compressGeoprocessor.MessageCount;
            int currentToolMessageIndex = 0;
            ProcessMessage("");
            ProcessMessage("         - Successfully Compressed the File Geodatabase...");
            ProcessMessage("            - Compress File Geodatabase Operation Messages...");
            while (currentToolMessageIndex < toolMessageCount)
            {
              //  Write the current message to the log file.
              ProcessMessage("              + " + compressGeoprocessor.GetMessage(currentToolMessageIndex));
              //  Increment the Tool Message Index Counter.
              currentToolMessageIndex++;
            }
              }

            }
            catch (System.IO.IOException ioException)
            {
              //  Determine the Line Number from which the exception was thrown.
              System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(ioException, true);
              System.Diagnostics.StackFrame stackFrame = stackTrace.GetFrame(stackTrace.FrameCount - 1);
              int lineNumber = stackFrame.GetFileLineNumber();

              //  Let the User know that the Compress Operation Failed.
              if (ErrorMessage != null)
              {
            ErrorMessage("The Compress File Geodatabase Operation in the FeatureClassUtilities.CompressFileGeoDB() Method Failed with error message - " + ioException.Message + " (" + ioException.Source + " Line:  " + lineNumber.ToString() + ")!");
            if (ProcessMessage != null)
            {
              int toolMessageCount = compressGeoprocessor.MessageCount;
              int currentToolMessageIndex = 0;
              ProcessMessage("The information from the Geoprocessor is:");
              while (currentToolMessageIndex < toolMessageCount)
              {
                //  Write the current message to the log file.
                ProcessMessage("   + " + compressGeoprocessor.GetMessage(currentToolMessageIndex));
                //  Increment to Toold Message Index Counter.
                currentToolMessageIndex++;
              }
            }
              }

              //  Return FALSE to the calling routine ito indicate that this process failed.
              return false;

            }
            catch (System.Runtime.InteropServices.COMException comException)
            {
              //  Determine the Line Number from which the exception was thrown.
              System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(comException, true);
              System.Diagnostics.StackFrame stackFrame = stackTrace.GetFrame(stackTrace.FrameCount - 1);
              int lineNumber = stackFrame.GetFileLineNumber();

              //  Let the User know that the Compress Operation Failed.
              if (ErrorMessage != null)
              {
            ErrorMessage("The Compress File Geodatabase Operation in the CompressFileGeoDB() Method Failed with error message - " + comException.Message + " (" + comException.ErrorCode + " Line:  " + lineNumber.ToString() + ")!");
            if (ProcessMessage != null)
            {
              int toolMessageCount = compressGeoprocessor.MessageCount;
              int currentToolMessageIndex = 0;
              ProcessMessage("The information from the Geoprocessor is:");
              while (currentToolMessageIndex < toolMessageCount)
              {
                //  Write the current message to the log file.
                ProcessMessage("   + " + compressGeoprocessor.GetMessage(currentToolMessageIndex));
                //  Increment to Toold Message Index Counter.
                currentToolMessageIndex++;
              }
            }
              }

              //  Return FALSE to the calling routine ito indicate that this process failed.
              return false;

            }

            //  If the process made it to here, it was successful so return TRUE to the calling
            //  method.
            return true;

              }
              catch (System.Exception caught)
              {
            //  Determine the Line Number from which the exception was thrown.
            System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(caught, true);
            System.Diagnostics.StackFrame stackFrame = stackTrace.GetFrame(stackTrace.FrameCount - 1);
            int lineNumber = stackFrame.GetFileLineNumber();

            //  Let the User know that this process failed.
            if (ErrorMessage != null)
            {
              ErrorMessage("The MaintTools.FeatureClassUtilities.CompressFileGeoDB() Method failed with error message:  " + caught.Message + " (Line:  " + lineNumber.ToString() + ")!");
            }

            //  Return NULL to the calling routine to indicate that this process failed.
            return null;

              }
              finally
              {
            //  If the Installed Runtimes List has been instantiated, close it.
            if (runtimeInfo != null)
            {
              runtimeInfo = null;
            }

            //  If the Geoprocessor Parameters Array has been instantiated, close it.
            if (geoprocessorVariantArray != null)
            {
              geoprocessorVariantArray = null;
            }

            //  If the Uncompress Geoprocessor Object has been instantiated, close it.
            if (compressGeoprocessor != null)
            {
              compressGeoprocessor = null;
            }

              }
        }