[C# - Registry] Clé de registre Piriform non accessible [Résolu]

Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
- - Dernière réponse : scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
- 13 sept. 2011 à 15:55
Bonjour,

je viens de tomber sur un problème des plus curieux.
J'ai installé Piriform CCleaner et Piriform Defraggler sur mon PC (Win 7 x64 Pro).

Ce code fonctionne :
RegistryKey CurrentKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft");

Ce code fonctionne aussi (HKCU) :
RegistryKey CurrentKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Piriform");

Celui-ci me renvoie null :
RegistryKey CurrentKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Piriform");

Pourquoi ? J'ai vérifié que la clé existe bien dans RegEdit. Les autorisations semblent être les mêmes sur les clés citées. J'ai ajouté un fichier de manifest :
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />.

J'ai tenté aussi avec les versions surchargées sans résultat :
RegistryKeyPermissionCheck.ReadSubTree, System.Security.AccessControl.RegistryRights.ReadKey

Est ce que quelqu'un aurait une idée parce que je sèche là :/ ?

Merci,

Vince

----------------------------
C++ forever
C# amateur
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
3
Merci
Je viens d'avoir un élément de réponse sur un forum M$.

Cela proviendrait d'une feature liée au 64 bits.
Je vais dépiler l'article :

http://msdn.microsoft.com/en-us/library/aa384232%28v=VS.85%29.aspx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
3
Merci
Associé à un commentaire de l'article pour changer la plateforme de compilation :
[url]http://stackoverflow.com/questions/6955906/c-access-64-bit-registry/url

Ca fonctionne avec mon application recompilée en 64 bits (mais donc pas en 32 bits).

(Maintenant, faut que je vois comment générer les 2 exe lors de la compil'.)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
0
Merci
Je viens de constater un problème similaire avec CD Burner XP sur la clé :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{7E265513-8CDA-4631-B696-F40D983F3B07}_is1

Idem avec :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0136AFB8-DA00-30CD-8D3B-8B641065A932}

J'ai essayé en décomposant et ma variable CurrentKey2 est à null aussi:
strPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
RegistryKey CurrentKey1 = RootKey.OpenSubKey(strPath, false);
RegistryKey CurrentKey2 = CurrentKey1.OpenSubKey("{0136AFB8-DA00-30CD-8D3B-8B641065A932}");

Et j'ai fait un copier coller donc pas d'erreur de frappe.

:/
Commenter la réponse de scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
0
Merci
Avec REG QUERY çà fonctionne, en .NET pas du tout :

BATCH :
---------
@echo off
cls

ECHO REG QUERY
REG QUERY HKLM\SOFTWARE\Piriform\CCleaner

ECHO REGREAD
RegRead HKLM -p SOFTWARE\Piriform\CCleaner
Pause

C# :
-----
try
{
RegistryKey CurrentKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Piriform\CCleaner", false);
if (CurrentKey != null)
{
object OutputResult = CurrentKey.GetValue("InstallLocation");
if (OutputResult == null)
Console.WriteLine("[null]");
else
Console.WriteLine(OutputResult.ToString());
}
else
{
Console.WriteLine("Can't open SubKey");
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString ());
}

Je deviens fou là....
Commenter la réponse de scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
0
Merci
Et ce n'est pas bien mieux en C++ où je me tape un error code de 2 :

int _tmain(int argc, _TCHAR* argv[])
{
HKEY hTestKey;
LONG Result = RegOpenKey (HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Piriform"), &hTestKey);
if(Result == ERROR_SUCCESS)
{
wprintf(L"OK 0x%x\n", Result);
}
else
{
wprintf(L"Format message failed with 0x%x\n", Result);
}

RegCloseKey(hTestKey);
return 0;
}
Commenter la réponse de scoubidou944