diff --git a/Lib/lib-tk/FixTk.py b/Lib/lib-tk/FixTk.py
index 346d3c3..cb60b61 100644
--- a/Lib/lib-tk/FixTk.py
+++ b/Lib/lib-tk/FixTk.py
@@ -10,6 +10,40 @@
 # <TCL_LIBRARY>\..\tcl<TCL_VERSION>, so anything close to
 # the real Tcl library will do.
 
+# Expand symbolic links on Vista
+try:
+    import ctypes
+    ctypes.windll.kernel32.GetFinalPathNameByHandleW
+except (ImportError, AttributeError):
+    def convert_path(s):
+        return s
+else:
+    def convert_path(s):
+        if isinstance(s, str):
+            s = s.decode("mbcs")
+        hdir = ctypes.windll.kernel32.\
+            CreateFileW(s, 0x80,    # FILE_READ_ATTRIBUTES
+                        1,          # FILE_SHARE_READ
+                        None, 3,    # OPEN_EXISTING
+                        0x02000000, # FILE_FLAG_BACKUP_SEMANTICS
+                        None)
+        if hdir == -1:
+            # Cannot open directory, give up
+            return s
+        buf = ctypes.create_unicode_buffer(u"", 32768)
+        res = ctypes.windll.kernel32.\
+            GetFinalPathNameByHandleW(hdir, buf, len(buf),
+                                      0) # VOLUME_NAME_DOS
+        ctypes.windll.kernel32.CloseHandle(hdir)
+        if res == 0:
+            # Conversion failed (e.g. network location)
+            return s
+        s = buf[:res]
+        # Ignore leading \\?\
+        if s.startswith(u"\\\\?\\"):
+            s = s[4:]
+        return s
+
 prefix = os.path.join(sys.prefix,"tcl")
 if not os.path.exists(prefix):
     # devdir/../tcltk/lib
@@ -17,6 +51,7 @@
     prefix = os.path.abspath(prefix)
 # if this does not exist, no further search is needed
 if os.path.exists(prefix):
+    prefix = convert_path(prefix)
     if not os.environ.has_key("TCL_LIBRARY"):
         for name in os.listdir(prefix):
             if name.startswith("tcl"):
