backported r76993 and r76994 so the trunk behaves the same way with MSVC Manifest files editing
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 2309d89..41d67fa 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -646,28 +646,7 @@
                 mfid = 1
             else:
                 mfid = 2
-                try:
-                    # Remove references to the Visual C runtime, so they will
-                    # fall through to the Visual C dependency of Python.exe.
-                    # This way, when installed for a restricted user (e.g.
-                    # runtimes are not in WinSxS folder, but in Python's own
-                    # folder), the runtimes do not need to be in every folder
-                    # with .pyd's.
-                    manifest_f = open(temp_manifest, "rb")
-                    manifest_buf = manifest_f.read()
-                    manifest_f.close()
-                    pattern = re.compile(
-                        r"""<assemblyIdentity.*?name=("|')Microsoft\."""\
-                        r"""VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)""",
-                        re.DOTALL)
-                    manifest_buf = re.sub(pattern, "", manifest_buf)
-                    pattern = "<dependentAssembly>\s*</dependentAssembly>"
-                    manifest_buf = re.sub(pattern, "", manifest_buf)
-                    manifest_f = open(temp_manifest, "wb")
-                    manifest_f.write(manifest_buf)
-                    manifest_f.close()
-                except IOError:
-                    pass
+                self._remove_visual_c_ref(temp_manifest)
             out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
             try:
                 self.spawn(['mt.exe', '-nologo', '-manifest',
@@ -677,6 +656,33 @@
         else:
             log.debug("skipping %s (up-to-date)", output_filename)
 
+    def _remove_visual_c_ref(self, manifest_file):
+        try:
+            # Remove references to the Visual C runtime, so they will
+            # fall through to the Visual C dependency of Python.exe.
+            # This way, when installed for a restricted user (e.g.
+            # runtimes are not in WinSxS folder, but in Python's own
+            # folder), the runtimes do not need to be in every folder
+            # with .pyd's.
+            manifest_f = open(manifest_file)
+            try:
+                manifest_buf = manifest_f.read()
+            finally:
+                manifest_f.close()
+            pattern = re.compile(
+                r"""<assemblyIdentity.*?name=("|')Microsoft\."""\
+                r"""VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)""",
+                re.DOTALL)
+            manifest_buf = re.sub(pattern, "", manifest_buf)
+            pattern = "<dependentAssembly>\s*</dependentAssembly>"
+            manifest_buf = re.sub(pattern, "", manifest_buf)
+            manifest_f = open(manifest_file, 'w')
+            try:
+                manifest_f.write(manifest_buf)
+            finally:
+                manifest_f.close()
+        except IOError:
+            pass
 
     # -- Miscellaneous methods -----------------------------------------
     # These are all used by the 'gen_lib_options() function, in