diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index ca06f3c..8f40e9f 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -269,12 +269,6 @@
     maxDiff = 4096
     UTF8_MODE_ERRORS = ('surrogatepass' if MS_WINDOWS else 'surrogateescape')
 
-    # core config
-    UNTESTED_CORE_CONFIG = (
-        # FIXME: untested core configuration variables
-        'dll_path',
-        'module_search_paths',
-    )
     # Mark config which should be get by get_default_config()
     GET_DEFAULT_CONFIG = object()
     DEFAULT_PRE_CONFIG = {
@@ -324,6 +318,7 @@
         'base_prefix': GET_DEFAULT_CONFIG,
         'exec_prefix': GET_DEFAULT_CONFIG,
         'base_exec_prefix': GET_DEFAULT_CONFIG,
+        'module_search_paths': GET_DEFAULT_CONFIG,
 
         'site_import': 1,
         'bytes_warning': 0,
@@ -354,6 +349,7 @@
             'legacy_windows_fs_encoding': 0,
         })
         DEFAULT_CORE_CONFIG.update({
+            'dll_path': GET_DEFAULT_CONFIG,
             'legacy_windows_stdio': 0,
         })
 
@@ -410,7 +406,10 @@
         code = textwrap.dedent('''
             import json
             import sys
+            import _testinternalcapi
 
+            configs = _testinternalcapi.get_configs()
+            core_config = configs['core_config']
             data = {
                 'stdio_encoding': sys.stdout.encoding,
                 'stdio_errors': sys.stdout.errors,
@@ -420,8 +419,10 @@
                 'base_exec_prefix': sys.base_exec_prefix,
                 'filesystem_encoding': sys.getfilesystemencoding(),
                 'filesystem_errors': sys.getfilesystemencodeerrors(),
-                'module_search_paths': sys.path,
+                'module_search_paths': core_config['module_search_paths'],
             }
+            if sys.platform == 'win32':
+                data['dll_path'] = core_config['dll_path']
 
             data = json.dumps(data)
             data = data.encode('utf-8')
@@ -431,7 +432,7 @@
 
         # Use -S to not import the site module: get the proper configuration
         # when test_embed is run from a venv (bpo-35313)
-        args = (sys.executable, '-S', '-c', code)
+        args = [sys.executable, '-S', '-c', code]
         env = dict(env)
         if not expected['isolated']:
             env['PYTHONCOERCECLOCALE'] = '0'
@@ -462,7 +463,9 @@
         for key, value in expected.items():
             if value is self.GET_DEFAULT_CONFIG:
                 expected[key] = config[key]
-        expected['module_search_paths'] = config['module_search_paths']
+
+        if add_path is not None:
+            expected['module_search_paths'].append(add_path)
         return expected
 
     def check_pre_config(self, config, expected):
@@ -470,16 +473,8 @@
         core_config = dict(config['core_config'])
         self.assertEqual(pre_config, expected)
 
-    def check_core_config(self, config, expected, add_path=None):
+    def check_core_config(self, config, expected):
         core_config = dict(config['core_config'])
-        if add_path is not None:
-            paths = [*expected['module_search_paths'], add_path]
-            if not paths[0]:
-                del paths[0]
-            self.assertEqual(core_config['module_search_paths'], paths)
-        for key in self.UNTESTED_CORE_CONFIG:
-            core_config.pop(key, None)
-            expected.pop(key, None)
         self.assertEqual(core_config, expected)
 
     def check_global_config(self, config):
@@ -529,7 +524,7 @@
                 expected_preconfig[key] = expected_config[key]
 
         self.check_pre_config(config, expected_preconfig)
-        self.check_core_config(config, expected_config, add_path)
+        self.check_core_config(config, expected_config)
         self.check_global_config(config)
 
     def test_init_default_config(self):
@@ -693,6 +688,18 @@
         self.check_config("init_read_set", core_config, preconfig,
                           add_path="init_read_set_path")
 
+    def test_run_main_config(self):
+        preconfig = {}
+        code = ('import _testinternalcapi, json; '
+                'print(json.dumps(_testinternalcapi.get_configs()))')
+        core_config = {
+            'argv': ['-c', 'arg2'],
+            'program': 'python3',
+            'program_name': './python3',
+            'run_command': code + '\n',
+        }
+        self.check_config("run_main_config", core_config, preconfig)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 73b37c5..2560bfc 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -747,6 +747,27 @@
 }
 
 
+static int test_run_main_config(void)
+{
+    _PyCoreConfig config = _PyCoreConfig_INIT;
+
+    wchar_t *argv[] = {L"python3", L"-c",
+                       (L"import _testinternalcapi, json; "
+                        L"print(json.dumps(_testinternalcapi.get_configs()))"),
+                       L"arg2"};
+    config.argv.length = Py_ARRAY_LENGTH(argv);
+    config.argv.items = argv;
+    config.program_name = L"./python3";
+
+    _PyInitError err = _Py_InitializeFromConfig(&config);
+    if (_Py_INIT_FAILED(err)) {
+        _Py_ExitInitError(err);
+    }
+
+    return _Py_RunMain();
+}
+
+
 /* *********************************************************
  * List of test cases and the function that implements it.
  *
@@ -785,6 +806,7 @@
     { "preinit_isolated2", test_preinit_isolated2 },
     { "init_read_set", test_init_read_set },
     { "run_main", test_run_main },
+    { "run_main_config", test_run_main_config },
     { NULL, NULL }
 };
 
