mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Uninstaller for Windows NT 3.5 and Windows 95.
 | 
						|
 | 
						|
Actions:
 | 
						|
 | 
						|
1. Remove our entries from the Registry:
 | 
						|
   - Software\Python\PythonCore\<winver>
 | 
						|
   - Software\Microsoft\Windows\CurrentVersion\Uninstall\Python<winver>
 | 
						|
   (Should we also remove the entry for .py and Python.Script?)
 | 
						|
 | 
						|
2. Remove the installation tree -- this is assumed to be the directory
 | 
						|
   whose path is both os.path.dirname(sys.argv[0]) and sys.path[0]
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
import sys
 | 
						|
import nt
 | 
						|
import os
 | 
						|
import win32api
 | 
						|
import win32con
 | 
						|
 | 
						|
def rmkey(parent, key, level=0):
 | 
						|
    sep = "    "*level
 | 
						|
    try:
 | 
						|
	handle = win32api.RegOpenKey(parent, key)
 | 
						|
    except win32api.error, msg:
 | 
						|
	print sep + "No key", `key`
 | 
						|
	return
 | 
						|
    print sep + "Removing key", key
 | 
						|
    while 1:
 | 
						|
	try:
 | 
						|
	    subkey = win32api.RegEnumKey(handle, 0)
 | 
						|
	except win32api.error, msg:
 | 
						|
	    break
 | 
						|
	rmkey(handle, subkey, level+1)
 | 
						|
    win32api.RegCloseKey(handle)
 | 
						|
    win32api.RegDeleteKey(parent, key)
 | 
						|
    print sep + "Done with", key
 | 
						|
 | 
						|
roothandle = win32con.HKEY_LOCAL_MACHINE
 | 
						|
pythonkey = "Software\\Python\\PythonCore\\" + sys.winver
 | 
						|
rmkey(roothandle, pythonkey)
 | 
						|
uninstallkey = \
 | 
						|
 "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Python"+sys.winver
 | 
						|
rmkey(roothandle, uninstallkey)
 | 
						|
 | 
						|
def rmtree(dir, level=0):
 | 
						|
    sep = "    "*level
 | 
						|
    print sep+"rmtree", dir
 | 
						|
    for name in os.listdir(dir):
 | 
						|
	if level == 0 and \
 | 
						|
	   os.path.normcase(name) == os.path.normcase("uninstall.bat"):
 | 
						|
	    continue
 | 
						|
	fn = os.path.join(dir, name)
 | 
						|
	if os.path.isdir(fn):
 | 
						|
	    rmtree(fn, level+1)
 | 
						|
	else:
 | 
						|
	    try:
 | 
						|
		os.remove(fn)
 | 
						|
	    except os.error, msg:
 | 
						|
		print sep+"  can't remove", `fn`, msg
 | 
						|
	    else:
 | 
						|
		print sep+"  removed", `fn`
 | 
						|
    try:
 | 
						|
	os.rmdir(dir)
 | 
						|
    except os.error, msg:
 | 
						|
	print sep+"can't remove directory", `dir`, msg
 | 
						|
    else:
 | 
						|
	print sep+"removed directory", `dir`	
 | 
						|
 | 
						|
pwd = os.getcwd()
 | 
						|
scriptdir = os.path.normpath(os.path.join(pwd, os.path.dirname(sys.argv[0])))
 | 
						|
pathdir = os.path.normpath(os.path.join(pwd, sys.path[0]))
 | 
						|
if scriptdir == pathdir:
 | 
						|
    rmtree(pathdir)
 | 
						|
else:
 | 
						|
    print "inconsistend script directory, not removing any files."
 | 
						|
    print "script directory =", `scriptdir`
 | 
						|
    print "path directory =", `pathdir`
 |