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

Signaler
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
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

5 réponses

Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

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
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

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'.)
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

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.

:/
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

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à....
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

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;
}