mono_reg_utils.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import os
  2. if os.name == 'nt':
  3. import sys
  4. if sys.version_info < (3,):
  5. import _winreg as winreg
  6. else:
  7. import winreg
  8. def _reg_open_key(key, subkey):
  9. try:
  10. return winreg.OpenKey(key, subkey)
  11. except (WindowsError, EnvironmentError) as e:
  12. import platform
  13. if platform.architecture()[0] == '32bit':
  14. bitness_sam = winreg.KEY_WOW64_64KEY
  15. else:
  16. bitness_sam = winreg.KEY_WOW64_32KEY
  17. return winreg.OpenKey(key, subkey, 0, winreg.KEY_READ | bitness_sam)
  18. def _find_mono_in_reg(subkey):
  19. try:
  20. with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, subkey) as hKey:
  21. value, regtype = winreg.QueryValueEx(hKey, 'SdkInstallRoot')
  22. return value
  23. except (WindowsError, EnvironmentError) as e:
  24. return None
  25. def _find_mono_in_reg_old(subkey):
  26. try:
  27. with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, subkey) as hKey:
  28. default_clr, regtype = winreg.QueryValueEx(hKey, 'DefaultCLR')
  29. if default_clr:
  30. return _find_mono_in_reg(subkey + '\\' + default_clr)
  31. return None
  32. except (WindowsError, EnvironmentError):
  33. return None
  34. def find_mono_root_dir():
  35. dir = _find_mono_in_reg(r'SOFTWARE\Mono')
  36. if dir:
  37. return dir
  38. dir = _find_mono_in_reg_old(r'SOFTWARE\Novell\Mono')
  39. if dir:
  40. return dir
  41. return None
  42. def find_msbuild_tools_path_reg():
  43. try:
  44. with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0') as hKey:
  45. value, regtype = winreg.QueryValueEx(hKey, 'MSBuildToolsPath')
  46. return value
  47. except (WindowsError, EnvironmentError) as e:
  48. return None