diff --git a/core/core.services.yml b/core/core.services.yml
index a7997ea66b..1315ed43ca 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -613,7 +613,7 @@ services:
     arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@plugin.manager.field.field_type']
   plugin.manager.archiver:
     class: Drupal\Core\Archiver\ArchiverManager
-    parent: default_plugin_manager
+    arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@file_system']
   plugin.manager.action:
     class: Drupal\Core\Action\ActionManager
     arguments: ['@container.namespaces', '@cache.discovery', '@module_handler']
diff --git a/core/includes/common.inc b/core/includes/common.inc
index f40565ab1c..95b9ffae5c 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1212,43 +1212,37 @@ function drupal_check_incompatibility($v, $current_version) {
 /**
  * Returns a string of supported archive extensions.
  *
- * @return
+ * @return string
  *   A space-separated string of extensions suitable for use by the file
  *   validation system.
+ *
+ * @deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Use
+ *   \Drupal::service('plugin.manager.archiver')->Extensions() instead.
  */
 function archiver_get_extensions() {
-  $valid_extensions = [];
-  foreach (\Drupal::service('plugin.manager.archiver')->getDefinitions() as $archive) {
-    foreach ($archive['extensions'] as $extension) {
-      foreach (explode('.', $extension) as $part) {
-        if (!in_array($part, $valid_extensions)) {
-          $valid_extensions[] = $part;
-        }
-      }
-    }
-  }
-  return implode(' ', $valid_extensions);
+  return \Drupal::service('plugin.manager.archiver')->getExtensions();
 }
 
 /**
  * Creates the appropriate archiver for the specified file.
  *
- * @param $file
+ * @param string $file
  *   The full path of the archive file. Note that stream wrapper paths are
  *   supported, but not remote ones.
  *
- * @return
- *   A newly created instance of the archiver class appropriate
- *   for the specified file, already bound to that file.
- *   If no appropriate archiver class was found, will return FALSE.
+ * @return \Drupal\Core\Archiver\ArchiverInterface|false
+ *   A newly created instance of the archiver class appropriate for the
+ *   specified file, already bound to that file. If no appropriate archiver
+ *   class was found, will return FALSE.
+ *
+ * @throws \Exception
+ *   If a remote stream wrapper path was passed.
+ *
+ * @deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Use
+ *   \Drupal::service('plugin.manager.archiver')->getArchiver() instead.
  */
 function archiver_get_archiver($file) {
-  // Archivers can only work on local paths
-  $filepath = drupal_realpath($file);
-  if (!is_file($filepath)) {
-    throw new Exception(t('Archivers can only operate on local files: %file not supported', ['%file' => $file]));
-  }
-  return \Drupal::service('plugin.manager.archiver')->getInstance(['filepath' => $filepath]);
+  return \Drupal::service('plugin.manager.archiver')->getArchiver($file);
 }
 
 /**
diff --git a/core/lib/Drupal/Core/Archiver/ArchiverManager.php b/core/lib/Drupal/Core/Archiver/ArchiverManager.php
index 7cd11f90a4..5894c73ab3 100644
--- a/core/lib/Drupal/Core/Archiver/ArchiverManager.php
+++ b/core/lib/Drupal/Core/Archiver/ArchiverManager.php
@@ -5,6 +5,7 @@
 use Drupal\Component\Plugin\Factory\DefaultFactory;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Plugin\DefaultPluginManager;
 
 /**
@@ -17,6 +18,13 @@
 class ArchiverManager extends DefaultPluginManager {
 
   /**
+   * The file system service.
+   *
+   * @var \Drupal\Core\File\FileSystemInterface
+   */
+  protected $fileSystem;
+
+  /**
    * Constructs a ArchiverManager object.
    *
    * @param \Traversable $namespaces
@@ -26,11 +34,14 @@ class ArchiverManager extends DefaultPluginManager {
    *   Cache backend instance to use.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   The module handler to invoke the alter hook with.
+   * @param \Drupal\Core\File\FileSystemInterface $file_system
+   *   The file system service.
    */
-  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, FileSystemInterface $file_system) {
     parent::__construct('Plugin/Archiver', $namespaces, $module_handler, 'Drupal\Core\Archiver\ArchiverInterface', 'Drupal\Core\Archiver\Annotation\Archiver');
     $this->alterInfo('archiver_info');
     $this->setCacheBackend($cache_backend, 'archiver_info_plugins');
+    $this->fileSystem = $file_system;
   }
 
   /**
@@ -61,4 +72,49 @@ public function getInstance(array $options) {
     }
   }
 
+  /**
+   * Returns a string of supported archive extensions.
+   *
+   * @return string
+   *   A space-separated string of extensions suitable for use by the file
+   *   validation system.
+   */
+  public function getExtensions() {
+    $valid_extensions = [];
+    foreach ($this->getDefinitions() as $archive) {
+      foreach ($archive['extensions'] as $extension) {
+        foreach (explode('.', $extension) as $part) {
+          if (!in_array($part, $valid_extensions)) {
+            $valid_extensions[] = $part;
+          }
+        }
+      }
+    }
+    return implode(' ', $valid_extensions);
+  }
+
+  /**
+   * Creates the appropriate archiver for the specified file.
+   *
+   * @param string $file
+   *   The full path of the archive file. Note that stream wrapper paths are
+   *   supported, but not remote ones.
+   *
+   * @return \Drupal\Core\Archiver\ArchiverInterface|false
+   *   A newly created instance of the archiver class appropriate for the
+   *   specified file, already bound to that file. If no appropriate archiver
+   *   class was found, will return FALSE.
+   *
+   * @throws \Exception
+   *   If a remote stream wrapper path was passed.
+   */
+  public function getArchiver($file) {
+    // Archivers can only work on local paths
+    $filepath = $this->fileSystem->realpath($file);
+    if (!is_file($filepath)) {
+      throw new \Exception("Archivers can only operate on local files: $file not supported");
+    }
+    return $this->getInstance(['filepath' => $filepath]);
+  }
+
 }
diff --git a/core/modules/update/src/Form/UpdateManagerInstall.php b/core/modules/update/src/Form/UpdateManagerInstall.php
index a99383ab95..4414a0855a 100644
--- a/core/modules/update/src/Form/UpdateManagerInstall.php
+++ b/core/modules/update/src/Form/UpdateManagerInstall.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\update\Form;
 
+use Drupal\Core\Archiver\ArchiverManager;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\FileTransfer\Local;
 use Drupal\Core\Form\FormBase;
@@ -37,6 +38,13 @@ class UpdateManagerInstall extends FormBase {
   protected $sitePath;
 
   /**
+   * The archiver plugin manager service.
+   *
+   * @var \Drupal\Core\Archiver\ArchiverManager
+   */
+  protected $archiverManager;
+
+  /**
    * Constructs a new UpdateManagerInstall.
    *
    * @param string $root
@@ -45,11 +53,14 @@ class UpdateManagerInstall extends FormBase {
    *   The module handler.
    * @param string $site_path
    *   The site path.
+   * @param \Drupal\Core\Archiver\ArchiverManager $archiver_manager
+   *   The archiver plugin manager service.
    */
-  public function __construct($root, ModuleHandlerInterface $module_handler, $site_path) {
+  public function __construct($root, ModuleHandlerInterface $module_handler, $site_path, ArchiverManager $archiver_manager) {
     $this->root = $root;
     $this->moduleHandler = $module_handler;
     $this->sitePath = $site_path;
+    $this->archiverManager = $archiver_manager;
   }
 
   /**
@@ -66,7 +77,8 @@ public static function create(ContainerInterface $container) {
     return new static(
       $container->get('update.root'),
       $container->get('module_handler'),
-      $container->get('site.path')
+      $container->get('site.path'),
+      $container->get('plugin.manager.archiver')
     );
   }
 
@@ -85,7 +97,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         ':module_url' => 'https://www.drupal.org/project/modules',
         ':theme_url' => 'https://www.drupal.org/project/themes',
         ':drupal_org_url' => 'https://www.drupal.org',
-        '%extensions' => archiver_get_extensions(),
+        '%extensions' => $this->archiverManager->getExtensions(),
       ]),
       '#suffix' => '</p>',
     ];
@@ -141,7 +153,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       }
     }
     elseif ($_FILES['files']['name']['project_upload']) {
-      $validators = ['file_validate_extensions' => [archiver_get_extensions()]];
+      $validators = ['file_validate_extensions' => [$this->archiverManager->getExtensions()]];
       if (!($finfo = file_save_upload('project_upload', $validators, NULL, 0, FILE_EXISTS_REPLACE))) {
         // Failed to upload the file. file_save_upload() calls
         // drupal_set_message() on failure.
diff --git a/core/modules/update/tests/src/Functional/UpdateUploadTest.php b/core/modules/update/tests/src/Functional/UpdateUploadTest.php
index 6096620062..5d49aa5d7c 100644
--- a/core/modules/update/tests/src/Functional/UpdateUploadTest.php
+++ b/core/modules/update/tests/src/Functional/UpdateUploadTest.php
@@ -49,7 +49,8 @@ public function testUploadModule() {
     ];
     // This also checks that the correct archive extensions are allowed.
     $this->drupalPostForm('admin/modules/install', $edit, t('Install'));
-    $this->assertText(t('Only files with the following extensions are allowed: @archive_extensions.', ['@archive_extensions' => archiver_get_extensions()]), 'Only valid archives can be uploaded.');
+    $extensions = \Drupal::service('plugin.manager.archiver')->getExtensions();
+    $this->assertSession()->pageTextContains(t('Only files with the following extensions are allowed: @archive_extensions.', ['@archive_extensions' => $extensions]));
     $this->assertUrl('admin/modules/install');
 
     // Check to ensure an existing module can't be reinstalled. Also checks that
