У меня есть 32-разрядный установщик perl. Используя это, мне нужно иметь возможность устанавливать и удалять 32- и 64-разрядные приложения.Как сделать 32-разрядный Perl читать 64-разрядный реестр Windows?
Установка 32- и 64-разрядных в порядке. Деинсталляция 32-разрядной версии тоже в порядке.
Однако у меня возникла проблема при удалении 64-разрядных приложений.
Приложение просто знает имя приложения, как показано в разделе «Добавить» Удалить программы на панели управления. Например, это может быть «Winzip 14.0», который является отображаемым именем для Winzip.
Я использую следующий подход для деинсталляции: я перехожу к HKLM/Software/Microsoft/Windows/CurrentVersion/Uninstall
и разбираю присутствующие там ключи, чтобы узнать, соответствует ли Winzip. Если так, я получаю строку удаления оттуда.
my $register = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
$HKEY_LOCAL_MACHINE->Open($register,$hKey)|| die $!;
#Then parse all the nodes and fetch the uninstall string
Если приложение является 64-разрядной установкой а, то информация о деинсталляции будет находиться в HKLM/Software/Microsoft/Windows/CurrentVersion/Uninstall
.
Однако Вышеприведенный Perl код установки пытается прочитать из HKLM/Software/WOW6432Node/Microsoft/Windows/CurrentVersion/Uninstall
и он не находит установку там.
Как сделать код Perl, запущенный в процессе 32_bit, для чтения значения реестра, найденного в 64-битном улье? Я знаю API RegOpenKey()
, который принимает параметр KEY_WOW64_64KEY
. Но поскольку это Windows API, я не знаю, поможет ли это. Даже тогда есть ли другая альтернатива?
Возможный дубликат [Чтение из реестра Windows в Perl] (http://stackoverflow.com/questions/30269931/reading-from-windows-registry-in-perl) –