Как я заставляю 32-разрядный Perl прочитать 64-разрядный реестр Windows?

У меня есть 32-разрядный установщик жемчуга. Используя это я должен смочь установить и удалить и 32-и 64-разрядные приложения.

Установка 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.

Однако вышеупомянутый данный код установщика жемчуга пытается читать из HKLM/Software/WOW6432Node/Microsoft/Windows/CurrentVersion/Uninstall
и это не находит установку там.

Таким образом, как я делаю код Perl, работающий в 32_bit процесс для чтения значения реестра, найденного в 64-разрядном улье? Я знаю RegOpenKey() API, который берет KEY_WOW64_64KEY параметр. Но так как это - Windows API, я не знаю, поможет ли это. Даже затем есть ли какая-либо другая альтернатива?

6
задан Kevin Panko 19 November 2010 в 19:42
поделиться

2 ответа

Да, нужно использовать KEY_WOW64_64KEY, другого обходного пути для 32-битного процесса нет. Вызов Win32 API непосредственно из Perl представляется возможным, судя по этой веб-странице.

2
ответ дан 17 December 2019 в 04:47
поделиться

Вы также можете напрямую вызвать программу reg, а не командный файл:

$WINDIR/system32/reg.exe

Это расположение по умолчанию для reg.exe, если он включен в операционную систему. .

$WINDIR/sysnative/reg.exe

Это виртуальное расположение собственного 64-битного reg.exe при запуске из 32-битного процесса.

2
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: