Résolu [RÉSOLU]Effacer une clé de registre HKCU

maille-hem

Nouveau membre
J'ai un petit soucis... voici le background :

Nous avons fait un master, créé et paramétré un profil que nous avons ensuite copié dans Default User. Suite à cela, pour chaque nouvel utilisateur, le path de Google Earth est faux dans le registre : il pointe vers "c:\Documents and Settings\Nom_du_profil\Application Data\Google Earth" avec le "Nom_du_profil" en dur et non pas en tant que variable (%username%).

Nous avons remarqué cela récemment, il y a donc passablement de profils créés sur les postes et nous n'allons pas le modifier à chaque fois.

J'ai donc cherché et en suis arrivé au script suivant :


[cpp]Dim WshShell, key

Set WshShell = WScript.CreateObject("WScript.Shell" )

key = "HKEY_CURRENT_USER\Software\Google\Google Earth Plus"

WshShell.RegDelete pkey
[/cpp]

Impossible de deleter la clé "HKEY_CURRENT_USER\Software\Google\Google Earth Plus" du fait des espaces je pense... j'ai donc essayé de concaténer, ben ça marche pas non plus !

Quelqu'un aurait-il une idée ? Là je nage (suis une pive en prog...)

Merci d'avance !
 

zeb

Modérateur
(Une pive (?) en prog... :??: en forum aussi :o Vas me lire le règlement et modifie ton message pour y encadrer ton bout de code avec les balises correctes. )

Pendant ce temps, je regarde ton 'petit' soucis
 

zeb

Modérateur
Ah bah, il manque un backslash !

Remarks
Specify a key-name by ending strName with a final backslash; leave it off to specify a value-name. Fully qualified key-names and value-names are prefixed with a root key. You may use abbreviated versions of root key names with the RegDelete method. The five possible root keys you can use are listed in the following table.

Source: http://msdn.microsoft.com/en-us/library/293bt9hh%28VS.85%29.aspx
 

maille-hem

Nouveau membre
Salut !

Merci de la réponse et désolé pour la balise manquante....


D'après ce que je lis, voici le script modifié... qui me renvoie la même erreur (Unable to remove reg key, etc etc)

[cpp]Dim WshShell, pkey

Set WshShell = WScript.CreateObject("WScript.Shell")

pkey = "HKCU\Software\Google\Google Earth Plus\"

WshShell.RegDelete pkey[/cpp]
 

zeb

Modérateur
Problème de droits ou de processus ayant réservé la ressource ?


Vas dans le registre par regedit et crée la clef HKEY_CURENT_USER\Sofware\Gougueul\Google Earth Plus et supprime-la par script :
Code:
WScript.CreateObject("WScript.Shell" ).RegDelete "HKCU\Software\Gougueul\Google Earth Plus\"
Ca devrait marcher pour la fausse clef. Alors ?
 

zeb

Modérateur
Meilleure réponse
Ouaip ! (Avec le peu d'informations que j'ai, bien-sûr)
Ou alors la clef ou une des sous-clef est ouverte par un processus, ce qui empêche que celle-là soit supprimée.

Tu peux vérifier les droits et les processus ?
Concernant l'exploration des clefs et des process, Marc Russinovitch avait un truc du genre RegistreMonitor... Google devrait t'aider (pas le Earth+, ^^)
 

maille-hem

Nouveau membre
Ben finalement non...

J'ai regardé et aucun process Google n'est lancé, aucun service, quedal.

Les droits sont ok également. De fait, je peux sans autre supprimer la clé depuis le registre sans soucis, il n'y a que depuis le script que ça ne prend pas, alors qu'il est lancé avec le même compte (admin local du poste)

Le code d'erreur est 8007005. J'ai trouvé ça sur experts-exchange :

[cpp]const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\RightFax Fax Printer"

Set objReg = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")

DeleteSubkey strKeypath
wscript.quit

Sub DeleteSubkey(strKeyPath)

'Get a string array of subkeys
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys

If IsArray(arrSubkeys) Then
'Iterate through each SubKey
For Each strSubkey In arrSubkeys
'Delete any Subkeys that are in the current subkey
DeleteSubkey strKeyPath & "\" & strSubkey
Next
End If

objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath

End Sub[/cpp]

Ce qui fonctionne dans le cas de l'exemple parce que cela supprime la clé ET les sous-clés.
Si je trouve quelle est la constante HKCU (par rapport à HKML=&H80000002) Je pense que ça devrait le faire.
 

maille-hem

Nouveau membre
...et j'ai trouvé ^-^'

Voilà le code :

[cpp]const HKEY_CURRENT_USER = &H80000001

strComputer = "."
strKeyPath = "Software\Google\Google Earth Plus"

Set objReg = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv" )

DeleteSubkey strKeypath
wscript.quit

Sub DeleteSubkey(strKeyPath)

'Get a string array of subkeys
objReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubkeys

If IsArray(arrSubkeys) Then
'Iterate through each SubKey
For Each strSubkey In arrSubkeys
'Delete any Subkeys that are in the current subkey
DeleteSubkey strKeyPath & "\" & strSubkey
Next
End If

objReg.DeleteKey HKEY_CURRENT_USER, strKeyPath

End Sub[/cpp]

Merci à toi zeb, tu m'as bien guidé !
 

zeb

Modérateur
Arf, ça ressemble à la suppression d'un répertoire non vide.
J'aurais dû y penser. Bof, si ça t'a fait y réfléchir, c'est déjà ça de gagner :)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 845
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut