from __future__ import unicode_literals from future import standard_library standard_library.install_aliases() from builtins import str import winreg import os import sys from platform_utils import paths RUN_REGKEY = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run" def is_installed(app_subkey): """Checks if the currently running copy is installed or portable variant. Requires the name of the application subkey found under the uninstall section in Windows registry.""" try: key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%s" % app_subkey) inst_dir = winreg.QueryValueEx(key,"InstallLocation")[0] except WindowsError: return False winreg.CloseKey(key) try: return os.stat(inst_dir) == os.stat(paths.app_path()) except WindowsError: return False def getAutoStart(app_name): """Queries if the automatic startup should be set for the application or not, depending on it's current state.""" try: key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_REGKEY) val = winreg.QueryValueEx(key, str(app_name))[0] return os.stat(val) == os.stat(sys.argv[0]) except (WindowsError, OSError): return False def setAutoStart(app_name, enable=True): """Configures automatic startup for the application, if the enable argument is set to True. If set to False, deletes the application AutoStart value.""" if getAutoStart(app_name) == enable: return key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_REGKEY, 0, winreg.KEY_WRITE) if enable: winreg.SetValueEx(key, str(app_name), None, winreg.REG_SZ, paths.get_executable()) else: winreg.DeleteValue(key, str(app_name))