/// <summary>
        /// Handles the Click event of the btnRestore control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        protected void btnRestore_Click(object sender, EventArgs e)
        {
            string filePath = ViewState["FilePath"].ToString();

            Page.MaintainScrollPositionOnPostBack = false;

            try
            {
                if (File.Exists(filePath))
                {
                    IBackupFile bak = new BackupFile(filePath);

                    bak.IncludeMembershipData = chkImportMembership.Checked;
                    bak.IncludeGalleryData    = chkImportGalleryData.Checked;

                    bak.Import();
                    UserController.LogOffUser();

                    ClientMessage = new ClientMessageOptions
                    {
                        Title          = "Restore Complete",
                        Message        = Resources.GalleryServerPro.Admin_Backup_Restore_Db_Successfully_Restored_Msg,
                        Style          = MessageStyle.Success,
                        AutoCloseDelay = 0
                    };
                }
                else
                {
                    ClientMessage = new ClientMessageOptions
                    {
                        Title   = "Restore Aborted",
                        Message = Resources.GalleryServerPro.Admin_Backup_Restore_Cannot_Restore_File_File_Not_Found_Msg,
                        Style   = MessageStyle.Error
                    };
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                ClientMessage = new ClientMessageOptions
                {
                    Title   = "Restore Aborted",
                    Message = String.Concat(Resources.GalleryServerPro.Admin_Backup_Restore_Cannot_Restore_File_Label, ex.Message),
                    Style   = MessageStyle.Error
                };
            }
            finally
            {
                DeletePreviouslyUploadedFile();

                ConfigureBackupFileInfo(null);

                HelperFunctions.PurgeCache();

                bool adviseUserToManuallyRestartApp = false;
                try
                {
                    // Recycle the app to force the providers to re-initialize. This will query the application ID from the database, which
                    // may have changed during the restore. If any errors occur, advise the user to manually restart the app.
                    Utils.ForceAppRecycle();
                }
                catch (IOException) { adviseUserToManuallyRestartApp = true; }
                catch (UnauthorizedAccessException) { adviseUserToManuallyRestartApp = true; }
                catch (PlatformNotSupportedException) { adviseUserToManuallyRestartApp = true; }

                if (adviseUserToManuallyRestartApp)
                {
                    ClientMessage = new ClientMessageOptions
                    {
                        Title   = "Restore Complete",
                        Message = Resources.GalleryServerPro.Admin_Backup_Restore_Db_Successfully_Restored_AppNotRecycled_Msg,
                        Style   = MessageStyle.Info
                    };
                }
            }
        }