Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from winreg import *
- import re
- import os
- import shutil
- local_machine_registry = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
- def find_subkeys(key_name, search_regex):
- subkeys_found=[]
- try:
- key = OpenKey(local_machine_registry, key_name, 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS)
- try:
- i = 0
- while True:
- subkey = EnumKey(key, i)
- if re.search(search_regex, subkey, re.I) is not None:
- if re.search("microsoft", subkey, re.I) is None:
- subkeys_found.append(subkey)
- i += 1
- except WindowsError:
- pass
- CloseKey(key)
- except WindowsError:
- pass
- return subkeys_found
- def find_values(key_name, search_regex):
- found_values=[]
- try:
- key = OpenKey(local_machine_registry, key_name, 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS)
- try:
- i = 0
- while True:
- name, value, value_type = EnumValue(key, i)
- if re.search(search_regex, name, re.I) is not None:
- found_values.append([name, value, type])
- if re.search(search_regex, value, re.I) is not None:
- found_values.append([name, value, type])
- i += 1
- except WindowsError:
- pass
- CloseKey(key)
- except WindowsError:
- pass
- return found_values
- def delete_subkeys(key_name, subkey_names):
- try:
- key = OpenKey(local_machine_registry, key_name, 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS)
- if subkey_names is not None:
- for subkey_name in subkey_names:
- print("Deleting subkey in " + key_name + ": " + subkey_name)
- DeleteKey(key, subkey_name)
- except WindowsError:
- pass
- def delete_values(key_name, values):
- try:
- key = OpenKey(local_machine_registry, key_name, 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS)
- if values is not None:
- for value in values:
- print("Deleting value in " + key_name + ": " + value[0])
- DeleteKey(key, value[0])
- except WindowsError:
- pass
- def get_value_names(values):
- names=[]
- for value in values:
- names.append(value[0])
- return names
- def get_oracle_homes(subkey_name, search_regex):
- oracle_homes=[]
- oracle_installs=find_subkeys(subkey_name, search_regex)
- if oracle_installs is not None:
- for oracle_install in oracle_installs:
- oracle_key=subkey_name + "\\" + oracle_install
- found_homes = find_values(oracle_key, "^oracle_home$")
- if found_homes is not None:
- for found_home in found_homes:
- oracle_homes.append(found_home[1])
- return oracle_homes
- def rm_oracle_homes(oracle_homes):
- if oracle_homes is not None:
- for oracle_home in oracle_homes:
- # check if folder exists
- if os.path.exists(oracle_home):
- # remove if exists
- shutil.rmtree(oracle_home)
- print("Removing dir: " + oracle_home)
- def clean_oracle_installs(key_prefix, bit_size):
- print("Cleaning " + bit_size + " bit registry...")
- oracle_odbc_insts = find_subkeys(key_prefix + "\\ODBC\\ODBCINST.INI", "oracle")
- delete_subkeys(key_prefix + "\\ODBC\\ODBCINST.INI", oracle_odbc_insts)
- oracle_odbc_drivers = find_values(key_prefix + "ODBC\\ODBCINST.INI\\ODBC Drivers", "oracle")
- delete_values(key_prefix + "\\ODBC\\ODBCINST.INI\\ODBC Drivers", oracle_odbc_drivers)
- oracle_datasources = find_values(key_prefix + "\\ODBC\\ODBC.INI\\ODBC Data Sources", "oracle")
- delete_values(key_prefix + "\\ODBC\\ODBC.INI\\ODBC Data Sources", oracle_datasources)
- delete_subkeys(key_prefix + "\\ODBC\\ODBC.INI", get_value_names(oracle_datasources))
- # get all oracle homes
- oracle_homes = get_oracle_homes(key_prefix + "\\Oracle", "KEY_")
- rm_oracle_homes(oracle_homes)
- # remove all info about oracle
- delete_subkeys(key_prefix, ["Oracle"])
- clean_oracle_installs(r"SOFTWARE", "64")
- clean_oracle_installs(r"SOFTWARE\Wow6432Node", "32")
- # remove oracle directory completely
- if os.path.exists(r"C:\oracle"):
- # remove if exists
- shutil.rmtree(r"C:\oracle")
- print(r"Removing dir: C:\oracle")
- install_directory = os.getcwd()
- # install odac 64
- print("Installing 64 bit ODAC...")
- os.chdir(install_directory + "\\ODAC112040Xcopy_64bit\\")
- os.system(install_directory + "\\ODAC112040Xcopy_64bit\\install.bat all C:\\Oracle\\ora64 ora64")
- # register
- os.chdir(r"C:\Oracle\ora64")
- os.system(r"C:\Oracle\ora64\odbc_install.exe")
- # install odac 32
- print("Installing 32 bit ODAC...")
- os.chdir(install_directory + "\\ODAC112040Xcopy_32bit\\")
- os.system(install_directory + "\\ODAC112040Xcopy_32bit\\install.bat all C:\\Oracle\\ora32 ora32")
- # register
- os.chdir(r"C:\Oracle\ora32")
- os.system(r"C:\Oracle\ora32\odbc_install.exe")
- # add tns_admin directory
- try:
- shutil.copytree(install_directory + "\\network" , "C:\\Oracle\\network")
- except OSError as exc: # python >2.5
- if exc.errno == errno.ENOTDIR:
- shutil.copy(install_directory + "\\network" , "C:\\Oracle\\network")
- else: raise
- # add tns_names to registry
- os.chdir(install_directory)
- for root, dirs, files in os.walk(install_directory):
- for file in files:
- if file.endswith('.reg'):
- os.system("regedit /s " + install_directory + "\\" + file)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement