Salut,

J'ai besoin de manipuler des clés registres sur Windows 7. Pour qu'un logiciel tiers puisse correctement fonctionner avec un module externe Python il faut que certaines clés soient présentes dans la table de registre. Je parviens sans soucis à créer ces clés via le module winreg (voir ci-dessous). Mais je ne parviens pas du tout à les supprimer. Ce qui m'ennuie quelque peu.

Voici un bout de code permettant de créer trois clés (dont deux sous-clés, ce qui me semble être important à signaler):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
import winreg
 
VERSION = '3.5'
PATTERN_PATH = os.path.join('Software', 'Python', 'PythonCore')
PYTHON_PATH = os.path.dirname(sys.executable)
# Keys and values to register
KEYS = (
    (VERSION, None),
    (VERSION + '\\' + 'InstallPath', PYTHON_PATH),
    (VERSION + '\\' + 'InstallPath\\InstallGroup', 'Python %s' % VERSION),
    )
 
def register_local_python():
 
    root = winreg.HKEY_CURRENT_USER
 
    for path, value in KEYS:
        keypath = os.path.join(PATTERN_PATH, path)
        # Open or create the registry key
        try:
            key = winreg.OpenKey(root, keypath, 0, winreg.KEY_ALL_ACCESS)
        except:
            key = winreg.CreateKey(root, keypath)
        # Set the associated value to the key
        if value:
            winreg.SetValueEx(key, '', 0, winreg.REG_SZ, value)
        # Properly close the key
        winreg.CloseKey(key)
Quand je liste mes clés, c'est ok. Mais comment les supprimer? L'aide de winreg indique que la méthode DeleteKey() doit être employée sur une clé n'ayant pas d'enfants. Donc j'ai songé à lister récursivement toutes les clés et de les classer afin de les supprimer par "niveau" (un peu galère). Mais je me retrouve systématiquement avec le message d'erreur suivant:
[WinError 2] Le fichier spécifié est introuvable
Je me suis rendu compte que j'avais ce soucis même en essayant d'effacer les clés de KEYS dans l'ordre inverse (vous noterez que ces clés sont rangés dans le bon ordre).

J'ai tenté avec un DeleteValue sans succès non plus. Et mes recherches sur le sujet n'on rien données de probant pour le moment. J'ai vu qu'il existait des wrappers plus ou moins suivis pour winreg, mais aucun ne semble proposer la suppression d'une clé et de toutes ses sous-clés..

Est-ce que vous auriez des conseils à me donner?

J