Как заставить ReadRegStr читать 32-битный узел? - PullRequest
0 голосов
/ 01 июня 2018

Как заставить NSIS прочитать x32 дерево раздела реестра Uninstall на ПК x64?
Пробовал все.

SetRegView 32
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXX" "XXX"

Не работает.Он читает

"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\XXX"

onInit или другую часть установки, но все равно ничего.

Используется NSIS 3.03.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Это немного противоречит интуиции, но вам нужно вместо этого использовать 64-битный reg view.

Для чтения из:

HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ XXX

Используйте следующую строку:

ReadRegStr $0 HKLM64 "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXX" "XXX"

или вы можете использовать следующие строки:

SetRegView 64
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXX" "XXX"
0 голосов
/ 02 июня 2018

Ключ WOW6432Node - это 32-битный ключ.

Перенаправленные ключи сопоставляются с физическими местоположениями в Wow6432Node .Например, HKEY_LOCAL_MACHINE \ Software перенаправляется на HKEY_LOCAL_MACHINE \ Software \ Wow6432Node.Однако физическое местоположение перенаправленных ключей должно считаться зарезервированным системой.Приложения не должны обращаться к физическому местоположению ключа напрямую, потому что это местоположение может измениться.Для получения дополнительной информации см. Доступ к альтернативному представлению реестра.

SOFTWARE\Microsoft\Windows\... в RegEdit на 64-разрядной машине - это 64-разрядное представление, и для доступа к нему вам необходимо SetRegView 64.

...