Issue #3160: the "bdist_wininst" distutils command didn't work.

Reviewed by Trent Nelson.
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
index ae7d4fd..e997e8f 100644
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -260,13 +260,18 @@
             cfgdata = cfgdata.encode("mbcs")
 
         # Append the pre-install script
-        cfgdata = cfgdata + "\0"
+        cfgdata = cfgdata + b"\0"
         if self.pre_install_script:
-            script_data = open(self.pre_install_script, "r").read()
-            cfgdata = cfgdata + script_data + "\n\0"
+            # We need to normalize newlines, so we open in text mode and
+            # convert back to bytes. "latin1" simply avoids any possible
+            # failures.
+            with open(self.pre_install_script, "r",
+                encoding="latin1") as script:
+                script_data = script.read().encode("latin1")
+            cfgdata = cfgdata + script_data + b"\n\0"
         else:
             # empty pre-install script
-            cfgdata = cfgdata + "\0"
+            cfgdata = cfgdata + b"\0"
         file.write(cfgdata)
 
         # The 'magic number' 0x1234567B is used to make sure that the
diff --git a/Misc/NEWS b/Misc/NEWS
index 9bd063b..0e51c80 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -77,6 +77,8 @@
 Library
 -------
 
+- Issue #3160: the "bdist_wininst" distutils command didn't work.
+
 - Issue #1658: tkinter changes dict size during iteration in both
     tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText.