示例#1
0
def process_tag(hive_name, company, company_key, tag, default_arch):
    with winreg.OpenKeyEx(company_key, tag) as tag_key:
        major, minor = load_version_data(hive_name, company, tag, tag_key)
        if major is None:
            return
        arch = load_arch_data(hive_name, company, tag, tag_key, default_arch)
    exe, args = load_exe(hive_name, company, company_key, tag)
    if exe is not None:
        name = "python" if company == "PythonCore" else company
        yield PythonSpec(name, major, minor, arch, exe, args)
示例#2
0
def process_set(hive, hive_name, key, flags, default_arch):
    try:
        with winreg.OpenKeyEx(hive, key, 0,
                              winreg.KEY_READ | flags) as root_key:
            for company in enum_keys(root_key):
                if company == "PyLauncher":  # reserved
                    continue
                for spec in process_company(hive_name, company, root_key,
                                            default_arch):
                    yield spec
    except OSError:
        pass
示例#3
0
def load_exe(hive_name, company, company_key, tag):
    key_path = "{}/{}/{}".format(hive_name, company, tag)
    try:
        with winreg.OpenKeyEx(company_key,
                              r"{}\InstallPath".format(tag)) as ip_key:
            with ip_key:
                exe = get_value(ip_key, "ExecutablePath")
                if exe is None:
                    ip = get_value(ip_key, None)
                    if ip is None:
                        msg(key_path, "no ExecutablePath or default for it")

                    else:
                        exe = os.path.join(ip, "python.exe")
                if os.path.exists(exe):
                    args = get_value(ip_key, "ExecutableArguments")
                    return exe, args
                else:
                    msg(key_path, "exe does not exists {}".format(exe))
    except OSError:
        msg("{}/{}".format(key_path, "InstallPath"), "missing")
    return None, None
示例#4
0
def process_company(hive_name, company, root_key, default_arch):
    with winreg.OpenKeyEx(root_key, company) as company_key:
        for tag in enum_keys(company_key):
            for spec in process_tag(hive_name, company, company_key, tag,
                                    default_arch):
                yield spec