diff --git a/core/includes/install.inc b/core/includes/install.inc
index e685221332..92d769e5ed 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -84,7 +84,7 @@ function drupal_load_updates() {
   foreach (\Drupal::service('update.update_hook_registry')->getAllInstalledVersions() as $module => $schema_version) {
     if ($extension_list_module->exists($module) && !$extension_list_module->checkIncompatibility($module)) {
       if ($schema_version > -1) {
-        module_load_install($module);
+        \Drupal::moduleHandler()->loadInstall($module);
       }
     }
   }
@@ -1027,7 +1027,7 @@ function drupal_requirements_severity(&$requirements) {
  *   TRUE or FALSE, depending on whether the requirements are met.
  */
 function drupal_check_module($module) {
-  module_load_install($module);
+  \Drupal::moduleHandler()->loadInstall($module);
   // Check requirements
   $requirements = \Drupal::moduleHandler()->invoke($module, 'requirements', ['install']);
   if (is_array($requirements) && drupal_requirements_severity($requirements) == REQUIREMENT_ERROR) {
diff --git a/core/includes/module.inc b/core/includes/module.inc
index 1ba12ce116..1a1b84d375 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -15,12 +15,16 @@
  *
  * @return
  *   The name of the module's install file, if successful; FALSE otherwise.
+ *
+ * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0.
+ *   Use \Drupal::moduleHandler()->loadInstall($module) instead.
+ *
+ * @see https://www.drupal.org/node/3220952
  */
 function module_load_install($module) {
-  // Make sure the installation API is available
-  include_once __DIR__ . '/install.inc';
 
-  return module_load_include('install', $module);
+  @trigger_error('module_load_install() is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Instead, you should use \Drupal::moduleHandler()->loadInstall(). See https://www.drupal.org/project/drupal/issues/2010380', E_USER_DEPRECATED);
+  return \Drupal::moduleHandler()->loadInstall($module);
 }
 
 /**
@@ -34,10 +38,10 @@ function module_load_install($module) {
  *   module_load_include('inc', 'node', 'content_types');
  * @endcode
  *
- * Do not use this function to load an install file, use module_load_install()
- * instead. Do not use this function in a global context since it requires
- * Drupal to be fully bootstrapped, use require_once DRUPAL_ROOT . '/path/file'
- * instead.
+ * Do not use this function to load an install file, instead use
+ * \Drupal::moduleHandler()->loadInstall(). Do not use this function in a global
+ * context because it requires Drupal to be fully bootstrapped, instead use
+ * require_once DRUPAL_ROOT . '/path/file'.
  *
  * @param $type
  *   The include file's type (file extension).
diff --git a/core/includes/schema.inc b/core/includes/schema.inc
index 62cc202459..f7621fd981 100644
--- a/core/includes/schema.inc
+++ b/core/includes/schema.inc
@@ -165,9 +165,10 @@ function drupal_uninstall_schema($module) {
  */
 function drupal_get_module_schema($module, $table = NULL) {
   @trigger_error('drupal_get_module_schema() is deprecated in drupal:9.2.0 and is removed from drupal:10.0.0. No direct replacement is provided. Testing classes could use \Drupal\TestTools\Extension\SchemaInspector for introspection. See https://www.drupal.org/node/2970993', E_USER_DEPRECATED);
+  $module_handler = \Drupal::moduleHandler();
   // Load the .install file to get hook_schema.
-  module_load_install($module);
-  $schema = \Drupal::moduleHandler()->invoke($module, 'schema');
+  $module_handler->loadInstall($module);
+  $schema = $module_handler->invoke($module, 'schema');
 
   if (isset($table)) {
     if (isset($schema[$table])) {
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 09a6227fd6..14be24d5c4 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -115,7 +115,7 @@ function _update_fix_missing_schema() {
     // don't, detect and fix the problem.
     if (!isset($versions[$module])) {
       // Ensure the .install file is loaded.
-      module_load_install($module);
+      $module_handler->loadInstall($module);
       $all_updates = $update_registry->getAvailableUpdates($module);
       // If the schema version of a module hasn't been recorded, we cannot
       // know the actual schema version a module is at, because
@@ -692,19 +692,20 @@ function update_retrieve_dependencies() {
   // the same order that \Drupal::moduleHandler()->invokeAll() does.
   foreach ($update_registry->getAllInstalledVersions() as $module => $schema) {
     // Skip modules that are entirely missing from the filesystem here, since
-    // module_load_install() will call trigger_error() if invoked on a module
-    // that doesn't exist. There's no way to catch() that, so avoid it entirely.
-    // This can happen when there are orphaned entries in the system.schema k/v
-    // store for modules that have been removed from a site without first being
-    // cleanly uninstalled. We don't care here if the module has been installed
-    // or not, since we'll filter those out in update_get_update_list().
+    // \Drupal::moduleHandler()->loadInstall() will call trigger_error() if
+    // invoked on a module that doesn't exist. There's no way to catch() that,
+    // so avoid it entirely. This can happen when there are orphaned entries in
+    // the system.schema key/value store for modules that have been removed from
+    // a site without first being cleanly uninstalled. We don't care here if the
+    // module has been installed or not, since we'll filter those out in
+    // update_get_update_list().
     if ($schema == $update_registry::SCHEMA_UNINSTALLED || !$extension_list->exists($module)) {
       // Nothing to upgrade.
       continue;
     }
     $function = $module . '_update_dependencies';
     // Ensure install file is loaded.
-    module_load_install($module);
+    \Drupal::moduleHandler()->loadInstall($module);
     if (function_exists($function)) {
       $updated_dependencies = $function();
       // Each implementation of hook_update_dependencies() returns a
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 74b0834ab3..88a56b63be 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -247,6 +247,16 @@ public function moduleExists($module) {
     return isset($this->moduleList[$module]);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function loadInstall($module) {
+    // Make sure the installation API is available.
+    include_once DRUPAL_ROOT . '/core/includes/install.inc';
+
+    return module_load_include('install', $module);
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -260,8 +270,8 @@ public function loadAllIncludes($type, $name = NULL) {
    * {@inheritdoc}
    */
   public function loadInclude($module, $type, $name = NULL) {
-    if ($type == 'install') {
-      // Make sure the installation API is available
+    if ($type === 'install') {
+      // Make sure the installation API is available.
       include_once $this->root . '/core/includes/install.inc';
     }
 
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
index 0258ac0953..83e22fab77 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
@@ -125,6 +125,17 @@ public function buildModuleDependencies(array $modules);
    */
   public function moduleExists($module);
 
+  /**
+   * Loads a module's installation hooks.
+   *
+   * @param string $module
+   *   The name of the module (without the .module extension).
+   *
+   * @return string|false
+   *   The name of the module's install file, if successful; FALSE otherwise.
+   */
+  public function loadInstall($module);
+
   /**
    * Loads an include file for each enabled module.
    *
diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
index 4d2290c35e..11d1f118d2 100644
--- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php
+++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
@@ -242,7 +242,7 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
 
         // Load the module's .module and .install files.
         $this->moduleHandler->load($module);
-        module_load_install($module);
+        $this->moduleHandler->loadInstall($module);
 
         if (!InstallerKernel::installationAttempted()) {
           // Replace the route provider service with a version that will rebuild
@@ -468,7 +468,7 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) {
       $this->moduleHandler->invokeAll('module_preuninstall', [$module]);
 
       // Uninstall the module.
-      module_load_install($module);
+      $this->moduleHandler->loadInstall($module);
       $this->moduleHandler->invoke($module, 'uninstall', [$sync_status]);
 
       // Remove all configuration belonging to the module.
diff --git a/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php b/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php
index c37150c779..4b6cb6cc00 100644
--- a/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php
+++ b/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php
@@ -3,9 +3,11 @@
 namespace Drupal\Core\Installer\Form;
 
 use Drupal\Core\Config\FileStorage;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Site\Settings;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides the profile selection form.
@@ -21,6 +23,30 @@ class SelectProfileForm extends FormBase {
    */
   const CONFIG_INSTALL_PROFILE_KEY = '::existing_config::';
 
+  /**
+   * Module handler service.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * SelectProfileForm constructor.
+   *
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   Module handler service.
+   */
+  public function __construct(ModuleHandlerInterface $module_handler) {
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static($container->get('module_handler'));
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -93,7 +119,7 @@ public function buildForm(array $form, FormStateInterface $form_state, $install_
         // profile's which implement hook_INSTALL() are not supported.
         // @todo https://www.drupal.org/project/drupal/issues/2982052 Remove
         //   this restriction.
-        module_load_install($extensions['profile']);
+        $this->moduleHandler->loadInstall($extensions['profile']);
         if (!function_exists($extensions['profile'] . '_install')) {
           $form['profile']['#options'][static::CONFIG_INSTALL_PROFILE_KEY] = $this->t('Use existing configuration');
           $form['profile'][static::CONFIG_INSTALL_PROFILE_KEY]['#description'] = [
diff --git a/core/modules/system/tests/src/Functional/System/SitesDirectoryHardeningTest.php b/core/modules/system/tests/src/Functional/System/SitesDirectoryHardeningTest.php
index 9a4f57d7dc..6bb826d105 100644
--- a/core/modules/system/tests/src/Functional/System/SitesDirectoryHardeningTest.php
+++ b/core/modules/system/tests/src/Functional/System/SitesDirectoryHardeningTest.php
@@ -92,7 +92,7 @@ public function testSitesDirectoryHardeningConfig() {
    *   An array of system requirements.
    */
   protected function checkSystemRequirements() {
-    module_load_install('system');
+    \Drupal::moduleHandler()->loadInstall('system');
     return system_requirements('runtime');
   }
 
diff --git a/core/modules/update/update.fetch.inc b/core/modules/update/update.fetch.inc
index b418d9c3ec..e45a3af1ea 100644
--- a/core/modules/update/update.fetch.inc
+++ b/core/modules/update/update.fetch.inc
@@ -18,7 +18,7 @@
  */
 function _update_cron_notify() {
   $update_config = \Drupal::config('update.settings');
-  module_load_install('update');
+  \Drupal::moduleHandler()->loadInstall('update');
   $status = update_requirements('runtime');
   $params = [];
   $notify_all = ($update_config->get('notification.threshold') == 'all');
diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index 30ffd4308b..795b4d4bcf 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -92,7 +92,7 @@ function update_page_top() {
         break;
 
     }
-    module_load_install('update');
+    \Drupal::moduleHandler()->loadInstall('update');
     $status = update_requirements('runtime');
     foreach (['core', 'contrib'] as $report_type) {
       $type = 'update_' . $report_type;
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
index f0f5211a0b..6aafa1646a 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
@@ -64,7 +64,7 @@ protected function setUp(): void {
     }
 
     // Create the test field.
-    module_load_install('entity_test');
+    \Drupal::moduleHandler()->loadInstall('entity_test');
     entity_test_install();
 
     // Install required default configuration for filter module.
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityLanguageTestBase.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityLanguageTestBase.php
index 10eca3f91e..55c8e01991 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityLanguageTestBase.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityLanguageTestBase.php
@@ -56,7 +56,7 @@ protected function setUp() {
     $this->installConfig(['language']);
 
     // Create the test field.
-    module_load_install('entity_test');
+    \Drupal::moduleHandler()->loadInstall('entity_test');
     entity_test_install();
 
     // Enable translations for the test entity type.
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityValidationTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityValidationTest.php
index f9ea94b61c..fd0a406204 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityValidationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityValidationTest.php
@@ -52,7 +52,7 @@ protected function setUp(): void {
     $this->installEntitySchema('entity_test_mulrev_changed');
 
     // Create the test field.
-    module_load_install('entity_test');
+    \Drupal::moduleHandler()->loadInstall('entity_test');
     entity_test_install();
 
     // Install required default configuration for filter module.
diff --git a/core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php b/core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php
index c8f306039f..1123fe3ada 100644
--- a/core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php
@@ -54,7 +54,7 @@ protected function setUp(): void {
     // The users table is needed for creating dummy user accounts.
     $this->installEntitySchema('user');
     // Register entity_test text field.
-    module_load_install('entity_test');
+    \Drupal::moduleHandler()->loadInstall('entity_test');
     entity_test_install();
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php b/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php
index 4255428532..eef73ea32e 100644
--- a/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/File/FileSystemRequirementsTest.php
@@ -45,7 +45,7 @@ public function testSettingsExist() {
    *   An array of system requirements.
    */
   protected function checkSystemRequirements() {
-    module_load_install('system');
+    \Drupal::moduleHandler()->loadInstall('system');
     return system_requirements('runtime');
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Module/ModuleLegacyTest.php b/core/tests/Drupal/KernelTests/Core/Module/ModuleLegacyTest.php
new file mode 100644
index 0000000000..0d91b5be03
--- /dev/null
+++ b/core/tests/Drupal/KernelTests/Core/Module/ModuleLegacyTest.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Module;
+
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests deprecations from module.inc file.
+ *
+ * @group legacy
+ */
+class ModuleLegacyTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['module_test'];
+
+  /**
+   * Test deprecation of module_load_install() function.
+   */
+  public function testModuleLoadInstall() {
+    $this->expectDeprecation('module_load_install() is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Instead, you should use \Drupal::moduleHandler()->loadInstall(). See https://www.drupal.org/project/drupal/issues/2010380');
+    $filename = module_load_install('node');
+    $this->assertStringEndsWith("node.install", $filename);
+  }
+
+}
