Je veux renommer la clé "MyApp \ Version1" à "MyApp \ Version2". P>
Je ne vois aucune fonction dans MSDN sur Renommer les clés dans le registre. P>
7 Réponses :
Si votre application nécessite des versions Vista ou de nouvelles versions de Windows, vous pouvez utiliser RegCopopytree () suivi de RegDeleTetree (). P>
Merci Ferruccio, je vais mettre en œuvre ça :)
Il n'y a pas de fonction pour renommer sur des versions plus anciennes de Windows, vous devez copier / supprimer sur votre propre Afaik. P>
Si vous devez prendre en charge XP, vous pouvez utiliser shcopykey suivi de RegDEleteKeyEx P>
RegDeleeteKeyEX code> n'est pas disponible sur 32 bits XP. Là-bas, vous n'avez qu'une seule option, c'est-à-dire à utiliser regdeletekey code>
Je sais que c'est une ancienne entrée, mais au cas où quelqu'un d'autre vient à la recherche, comme moi ... P>
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);
URL mise à jour pour Pavel's Post: link
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: p>
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
);
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.
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