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

Messages postés
728
Date d'inscription
mardi 22 avril 2003
Dernière intervention
19 janvier 2017
- - Dernière réponse : scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
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 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
728
Date d'inscription
mardi 22 avril 2003
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

Merci scoubidou944 3

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

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
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'.)

Merci scoubidou944 3

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

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
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
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
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.