예제 #1
0
 def test_list_keys_non_existing(self):
     """
     Test the list_keys function using a non existing registry key
     """
     expected = (False, "Cannot find key: HKLM\\{0}".format(FAKE_KEY))
     self.assertEqual(win_reg.list_keys(hive="HKLM", key=FAKE_KEY),
                      expected)
예제 #2
0
 def test_list_keys_non_existing(self):
     '''
     Test the list_keys function using a non existing registry key
     '''
     expected = (False, 'Cannot find key: HKLM\\{0}'.format(FAKE_KEY))
     self.assertEqual(win_reg.list_keys(hive='HKLM', key=FAKE_KEY),
                      expected)
예제 #3
0
 def test_list_keys_existing(self):
     '''
     Test the list_keys function using a well known registry key
     '''
     self.assertIn(
         'Microsoft',
         win_reg.list_keys(
             hive='HKLM',
             key='SOFTWARE'
         )
     )
예제 #4
0
 def test_list_keys_existing(self):
     """
     Test the list_keys function using a well known registry key
     """
     self.assertIn("Microsoft",
                   win_reg.list_keys(hive="HKLM", key="SOFTWARE"))
예제 #5
0
def versions():
    """
    Figure out what versions of .NET are installed on the system

    Returns:
        dict: A dictionary containing two keys:
            - versions: A list of versions installed on the system
            - details: A dictionary with details about the versions installed on
              the system
    """
    hive = "HKLM"
    key = "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP"
    ver_keys = win_reg.list_keys(hive=hive, key=key)

    def dotnet_45_plus_versions(release):
        if release >= 528040:
            return "4.8"
        if release >= 461808:
            return "4.7.2"
        if release >= 461308:
            return "4.7.1"
        if release >= 460798:
            return "4.7"
        if release >= 394802:
            return "4.6.2"
        if release >= 394254:
            return "4.6.1"
        if release >= 393295:
            return "4.6"
        if release >= 379893:
            return "4.5.2"
        if release >= 378675:
            return "4.5.1"
        if release >= 378389:
            return "4.5"

    return_dict = {"versions": [], "details": {}}
    for ver_key in ver_keys:

        if ver_key.startswith("v"):
            if win_reg.value_exists(
                hive=hive, key="\\".join([key, ver_key]), vname="Version"
            ):
                # https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#find-net-framework-versions-1-4-with-codep
                install = win_reg.read_value(
                    hive=hive, key="\\".join([key, ver_key]), vname="Install"
                )["vdata"]
                if not install:
                    continue
                version = win_reg.read_value(
                    hive=hive, key="\\".join([key, ver_key]), vname="Version"
                )["vdata"]
                sp = win_reg.read_value(
                    hive=hive, key="\\".join([key, ver_key]), vname="SP"
                )["vdata"]
            elif win_reg.value_exists(
                hive=hive, key="\\".join([key, ver_key, "Full"]), vname="Release"
            ):
                # https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#find-net-framework-versions-45-and-later-with-code
                install = win_reg.read_value(
                    hive=hive, key="\\".join([key, ver_key, "Full"]), vname="Install"
                )["vdata"]
                if not install:
                    continue
                version = dotnet_45_plus_versions(
                    win_reg.read_value(
                        hive=hive,
                        key="\\".join([key, ver_key, "Full"]),
                        vname="Release",
                    )["vdata"]
                )
                sp = "N/A"
            else:
                continue

            service_pack = " SP{0}".format(sp) if sp != "N/A" else ""
            return_dict["versions"].append(version)
            return_dict["details"][ver_key] = {
                "version": version,
                "service_pack": sp,
                "full": "{0}{1}".format(version, service_pack),
            }

    return return_dict
예제 #6
0
def versions():
    '''
    Figure out what versions of .NET are installed on the system

    Returns:
        dict: A dictionary containing two keys:
            - versions: A list of versions installed on the system
            - details: A dictionary with details about the versions installed on
              the system
    '''
    hive = 'HKLM'
    key = 'SOFTWARE\\Microsoft\\NET Framework Setup\\NDP'
    ver_keys = win_reg.list_keys(hive=hive, key=key)

    def dotnet_45_plus_versions(release):
        if release >= 461808:
            return '4.7.2'
        if release >= 461308:
            return '4.7.1'
        if release >= 460798:
            return '4.7'
        if release >= 394802:
            return '4.6.2'
        if release >= 394254:
            return '4.6.1'
        if release >= 393295:
            return '4.6'
        if release >= 379893:
            return '4.5.2'
        if release >= 378675:
            return '4.5.1'
        if release >= 378389:
            return '4..5'

    return_dict = {'versions': [], 'details': {}}
    for ver_key in ver_keys:

        if ver_key.startswith('v'):
            if win_reg.value_exists(hive=hive,
                                    key='\\'.join([key, ver_key]),
                                    vname='Version'):
                # https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#find-net-framework-versions-1-4-with-codep
                install = win_reg.read_value(hive=hive,
                                             key='\\'.join([key, ver_key]),
                                             vname='Install')['vdata']
                if not install:
                    continue
                version = win_reg.read_value(hive=hive,
                                             key='\\'.join([key, ver_key]),
                                             vname='Version')['vdata']
                sp = win_reg.read_value(hive=hive,
                                        key='\\'.join([key, ver_key]),
                                        vname='SP')['vdata']
            elif win_reg.value_exists(hive=hive,
                                      key='\\'.join([key, ver_key, 'Full']),
                                      vname='Release'):
                # https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#find-net-framework-versions-45-and-later-with-code
                install = win_reg.read_value(hive=hive,
                                             key='\\'.join(
                                                 [key, ver_key, 'Full']),
                                             vname='Install')['vdata']
                if not install:
                    continue
                version = dotnet_45_plus_versions(
                    win_reg.read_value(hive=hive,
                                       key='\\'.join([key, ver_key, 'Full']),
                                       vname='Release')['vdata'])
                sp = 'N/A'
            else:
                continue

            service_pack = ' SP{0}'.format(sp) if sp != 'N/A' else ''
            return_dict['versions'].append(version)
            return_dict['details'][ver_key] = {
                'version': version,
                'service_pack': sp,
                'full': '{0}{1}'.format(version, service_pack)
            }

    return return_dict