2010-11-30 58 views
0

Je désinstalle une application et lit la valeur d'énumération d'installation de logiciel à partir du registre. Le problème est après désinstallation il ne change pas la valeur de Registre jusqu'à ce que l'écran ou regedit ne soit pas rafraîchi. après avoir rafraîchi seulement je reçois la valeur correcte.Comment actualiser la valeur de registre

Quelqu'un pourrait-il m'aider à actualiser le regedit dans les codes python.

Cordialement, Upendra

Répondre

1

Je suppose que par « rafraîchissante » l'écran « » tu veux dire redémarrer l'ordinateur? Peu importe, vous pouvez être sûr que les clés de registre que vous avez modifiées seront correctement mises à jour après le redémarrage du système. Le registre est mis à jour avec des threads flush et writer paresseux, donc je suppose que les modifications que vous faites ne sont pas renvoyées au registre immédiatement, mais votre question ne fournit pas assez d'informations sur la façon dont vous modifiez ces valeurs de registre pour moi de pouvoir proposer une solution alternative.

Peut-être plus important encore, qu'essayez-vous de faire ici? Essayez-vous d'obtenir votre programme de désinstallation pour vérifier que votre application a été désinstallée? Pourquoi est-ce nécessaire? Je pense qu'il doit y avoir un meilleur moyen que de s'attendre à ce que les modifications apportées au registre soient validées, puis relues immédiatement.

0

Je modifie la clé de registre et je souhaite lire ces valeurs sans redémarrer le système.

Je suis capable de lire manuellement si je rafraîchis l'écran (bouton F5), mais pourriez-vous me dire comment capturer cela via python.

1

J'ai le même genre de problème. J'installe un outil et un environnement python et crée des variables système dans le registre. Pour actualiser le registre, je fais ce qui suit:

def RefreshEnv(): 
    HWND_BROADCAST = 0xFFFF 
    WM_SETTINGCHANGE = 0x1A 

    SMTO_ABORTIFHUNG = 0x0002 

    result = ctypes.c_long() 
    SendMessageTimeoutW = ctypes.windll.user32.SendMessageTimeoutW 
    SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0, u'Environment', 
         SMTO_ABORTIFHUNG, 5000, ctypes.byref(result)) 

Cette méthode est rafraîchissante dans le registre comme je m'y attendais. Je dois encore ouvrir la fenêtre pour modifier les variables système dans Windows et cliquez simplement sur OK pour les rafraîchir. Sinon, mes outils installés plantent avec un KeyError en essayant d'attraper les variables d'environnement.

Je ne sais pas si la fonction Refresh ci-dessus vous aidera (je suppose que non), mais au moins c'est un essai.