Utiliser TieRegistry sur des clés contenant des clsid ?
Bonjour,
Je commence tout juste à écrire des scripts en Perl pour automatiser des installations de logiciels.
Je vérifie les logiciels installés en listant les clées contenues dans:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Le code ne marche que pour les clés ayant un nom d'application "en clair".
Les logiciels identifiés par leur clsid ne sont pas listés. Quelqu'un aurait une idée de contourner le problème ? J'imagine que ce sont les signes {} qui ne passent pas ...
(exemple : GanttProject <=> {06DD33C9-F258-4681-9269-FF0283D7C4EA} )
Voici mon extrait de code:
Code:
1 2 3 4 5 6 7 8 9 10
| # Open Registry keys:
use Win32::TieRegistry ( Delimiter=>"/", ArrayValues=>1 );
$Registry->Delimiter("/"); # Set delimiter to "/".
$swKey= $Registry->{"LMachine/Software/"};
$uninstallKey= $swKey->{"Microsoft/Windows/CurrentVersion/Uninstall/"};
# Scan Uninstall key
foreach $subKey ( $uninstallKey->SubKeyNames ) {
# Get value data:
$valueString= $subKey->GetValue("DisplayName");
print "Found registry key $UninstallKey->SubKeyNames = $valueString \n"; |
Merci d'avance ! :)
Balises [ code ] et [ /code ] ajoutées par 2Eurocents. :tagcode:
Ouvrir une clé de registre en lecture seule
nematoad,
Tu avais raison.
Les clés que je n'arrivais pas à lire n'étaient accessibles qu'en lecture.
Et ces clés (je ne pense pas que ce soit un coïncidence) ont des noms codés sous forme de clsid.
Je ne me suis pas méfié car je pensais ne faire que de la lecture, mais il fallait spécifier l'ouverture de la clé en lecture seule.
- Voici un exemple qui fonctionne sans avoir besoin des droits administrateurs pour ceux que cela interesse:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
# Open Registry keys:
use Win32::TieRegistry ( Delimiter=>"//", ArrayValues=>1 );
use Win32::TieRegistry qw(:KEY_);
$LMKey= $Registry->Open( "LMachine", {Access=>KEY_READ(),Delimiter=>"//"} )
or die "Can't open HKEY_LOCAL_MACHINE key: $^E\n";
$uninstallKey= $LMKey->{"Software//Microsoft//Windows//CurrentVersion//Uninstall"} or die "Can't open Software/Microsoft/Windows/CurrentVersion/Uninstall key: $^E\n";
# Scan Uninstall subkeys
foreach $subKey ( $uninstallKey->SubKeyNames ) {
print "Application subkey is: \"$subKey\" \n";
$appKey= $uninstallKey->{$subKey} or print "\"$subKey\",\"ERROR: $^E\n";
# Get value data:
$valueString= $appKey->GetValue("DisplayName");
print "DisplayName for \"$subKey\" is \"$valueString\" \n"; |
Merci. :D