annotate PC/setup_nt/uninstall.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 94da58214d6c
children 37234e1bb75f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4190
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """Uninstaller for Windows NT 3.5 and Windows 95.
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 Actions:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 1. Remove our entries from the Registry:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 - Software\Python\PythonCore\<winver>
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 - Software\Microsoft\Windows\CurrentVersion\Uninstall\Python<winver>
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 (Should we also remove the entry for .py and Python.Script?)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 2. Remove the installation tree -- this is assumed to be the directory
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 whose path is both os.path.dirname(sys.argv[0]) and sys.path[0]
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 """
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 import sys
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 import nt
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 import os
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 import win32api
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 import win32con
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 def rmkey(parent, key, level=0):
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 sep = " "*level
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 try:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 handle = win32api.RegOpenKey(parent, key)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 except win32api.error, msg:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 print sep + "No key", `key`
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 return
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 print sep + "Removing key", key
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 while 1:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 try:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 subkey = win32api.RegEnumKey(handle, 0)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 except win32api.error, msg:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 break
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 rmkey(handle, subkey, level+1)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 win32api.RegCloseKey(handle)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 win32api.RegDeleteKey(parent, key)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 print sep + "Done with", key
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 roothandle = win32con.HKEY_LOCAL_MACHINE
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 pythonkey = "Software\\Python\\PythonCore\\" + sys.winver
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 rmkey(roothandle, pythonkey)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 uninstallkey = \
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Python"+sys.winver
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 rmkey(roothandle, uninstallkey)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 def rmtree(dir, level=0):
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 sep = " "*level
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 print sep+"rmtree", dir
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 for name in os.listdir(dir):
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 if level == 0 and \
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 os.path.normcase(name) == os.path.normcase("uninstall.bat"):
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 continue
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 fn = os.path.join(dir, name)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 if os.path.isdir(fn):
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 rmtree(fn, level+1)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 else:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 try:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 os.remove(fn)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 except os.error, msg:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 print sep+" can't remove", `fn`, msg
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 else:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 print sep+" removed", `fn`
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 try:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 os.rmdir(dir)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 except os.error, msg:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 print sep+"can't remove directory", `dir`, msg
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 else:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 print sep+"removed directory", `dir`
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 pwd = os.getcwd()
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 scriptdir = os.path.normpath(os.path.join(pwd, os.path.dirname(sys.argv[0])))
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 pathdir = os.path.normpath(os.path.join(pwd, sys.path[0]))
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 if scriptdir == pathdir:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 rmtree(pathdir)
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 else:
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 print "inconsistend script directory, not removing any files."
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 print "script directory =", `scriptdir`
94da58214d6c Added uninstall option
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 print "path directory =", `pathdir`