7
votes

Registre - Comment renommer la clé dans le registre à l'aide de C ++?

Comment renommer la clé dans le registre à l'aide de C ++?

Je veux renommer la clé "MyApp \ Version1" à "MyApp \ Version2".

Je ne vois aucune fonction dans MSDN sur Renommer les clés dans le registre.


2 commentaires

Ce que vous pourriez faire est de stocker la chaîne de version dans le registre sous MyApp. Ensuite, au lieu de renommer ou de copier et de supprimer, vous devrez simplement mettre à jour la valeur de la chaîne de version.


Regenamekey


7 Réponses :


7
votes

Si votre application nécessite des versions Vista ou de nouvelles versions de Windows, vous pouvez utiliser RegCopopytree () suivi de RegDeleTetree ().


1 commentaires

Merci Ferruccio, je vais mettre en œuvre ça :)



5
votes

Il n'y a pas de fonction pour renommer sur des versions plus anciennes de Windows, vous devez copier / supprimer sur votre propre Afaik.


0 commentaires

3
votes

Si vous devez prendre en charge XP, vous pouvez utiliser shcopykey suivi de RegDEleteKeyEx


1 commentaires

RegDeleeteKeyEX n'est pas disponible sur 32 bits XP. Là-bas, vous n'avez qu'une seule option, c'est-à-dire à utiliser regdeletekey



2
votes

Je sais que c'est une ancienne entrée, mais au cas où quelqu'un d'autre vient à la recherche, comme moi ...

dans Cette page MSDN < / a>, quelqu'un a trouvé un robenamekey (HKEY, Nom, NewkeyName) Disponible de Vista à partir de.


0 commentaires

4
votes

Quelque plus d'informations sur cette ancienne entrée:

NTRENAMEKEY () est une ancienne API pour renommer une clé de registre. P>

aussi, Pavel a plus d'informations sur l'appel de RandomameKey () mentionné dans Randomsock, et (bien que ceci est une question C ++) fournit cette Belle signature de Pinvoke pour cela. P>

[DllImport("advapi32")]
public static extern int RegRenameKey(
     SafeRegistryHandle hKey,
     [MarshalAs(UnmanagedType.LPWStr)] string oldname,
     [MarshalAs(UnmanagedType.LPWStr)] string newname);


1 commentaires

URL mise à jour pour Pavel's Post: link



0
votes

Bon jour, mes collègues programmeurs,

Juste au cas où vous essayez de le faire en C # (p / invoke), voici comment je l'ai fait: xxx < P> Enums ont été pris de Vanara Project J'espère que cela aide quelqu'un


0 commentaires

2
votes

Si quelqu'un a besoin des détails sur le renommage, je laisse un journal ici.

Le RegenameKey code> est apparemment défini: p>

LSTATUS WINAPI RegRenameKey( 
  _In_         HKEY    hKey, 
  _In_         LPCTSTR lpSubKeyName,
  _In_         LPCTSTR lpNewKeyName 
);


2 commentaires

Vous n'avez pas vraiment besoin du chemin complet, si la poignée est une poignée de dossier contenant. Considérons: String rootPath = "logiciel \\ 7-zip"; string oldname = "fff"; String NewName = "AAA"; Registre racine racine = registre.currenttuser.opensubkey (rootpath, vrai); int hresult = robenamekey (rootkey.handle, oldname, newname);


@Max merci pour votre commentaire et votre exemple. Je n'ai pas écrit plein chemin. J'ai écrit "Touche avec chemin", qui correspond toujours à vos exemples.