我有一个32位的Perl安装程序,需要使用它来安装和卸载32位和64位应用程序。
安装32位和64位应用程序都没有问题。卸载32位也没问题。
然而,在卸载64位应用程序时,我遇到了问题。
该应用程序只知道在控制面板中“添加删除程序”中看到的应用程序名称。例如,“Winzip 14.0”是Winzip的显示名称。
我使用以下方法进行卸载:遍历
如果应用程序是64位安装,则卸载信息将驻留在
然而,上述Perl安装程序代码试图从
那么,我该如何让运行在32位进程中的Perl代码读取在64位hive中发现的注册表值?我知道
安装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
读取,并且在那里找不到安装信息。那么,我该如何让运行在32位进程中的Perl代码读取在64位hive中发现的注册表值?我知道
RegOpenKey()
API需要KEY_WOW64_64KEY
参数,但由于它是Windows API,我不知道这是否有帮助。即使这样,还有其他替代方法吗?