从 Perl 中的 Windows 注册表读取[重复]

2023-12-08

我试图在不检查一系列硬编码路径的情况下获取程序的安装位置,希望从 Windows 注册表中存储的路径中获取它,但是当我尝试读取所需的键值。

我读过关于使用 Perl 解析 Windows 注册表,我想我已经将所有答案合并到我的脚本中,但是当我尝试读取注册表值时,即使从提升的命令提示符运行以确保脚本具有管理员权限,我总是得到空结果。

我首先尝试使用 Win32::TieRegistry,正如前面提到的,返回值是空的,所以然后我尝试只是剔除并使用reg query,但这会给出有关未找到密钥的错误。运行相同reg queryPerl 外部的命令成功读取密钥。我究竟做错了什么?


Update:根本原因(在我收到的几个答案中指出)是试图从 32 位 Perl 访问 64 位注册表视图;默认情况下,Windows 中的任何 32 位应用程序都会重定向到HKLM\Software\WOW6432Node当尝试访问时HKLM\Software钥匙,所以我需要找到一种方法来避免这种情况,因为我感兴趣的钥匙不存在于该位置。


Perl 脚本:

#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use Win32::TieRegistry (Delimiter => '/');

my $mykey = $Registry->{'HKEY_LOCAL_MACHINE/Software/ikv++ technologies ag/medini unite (x64)'};
my $mykeyval = $mykey->{'/Path'};

print " value=$mykeyval\n";

print Dumper $mykey;

my $sysCmd =`reg query "HKLM\\Software\\ikv++ technologies ag\\medini unite (x64)" /v Path`;
print " sysCmd=$sysCmd\n";

Output:

C:\Users\username\AppData\Local\Temp>perl test_reg_read.pl
Use of uninitialized value in concatenation (.) or string at test_reg_read.pl line 9.
 value=
$VAR1 = {};
ERROR: The system was unable to find the specified registry key or value.
 sysCmd=

Manual reg queryPerl 之外的命令:

C:\Users\username\AppData\Local\Temp>reg query "HKLM\Software\ikv++ technologies ag\medini unite (x64)" /v Path

HKEY_LOCAL_MACHINE\Software\ikv++ technologies ag\medini unite (x64)
    Path    REG_SZ    C:\Program Files\ikv++ technologies ag\mediniUnite

请注意,所有这些现在都是从提升的命令提示符运行的;一旦它在那里工作,我就会尝试一下是否有必要。


您使用的是 64 位操作系统和 32 位 perl 这意味着当从 perl 运行时,您实际上获得的是 WOW6432Node 中的值,而不是您想要的键

你需要使用 64 位 perl。

例如从我自己的机器上

λ c:\Strawberry\perl\bin\perl
my $sysCmd = `reg query  "HKLM\\SOFTWARE\\VMware, Inc.\\VMware Drivers" /v vmci.status`;
print $sysCmd;
^D
ERROR: The system was unable to find the specified registry key or value.

λ c:\Strawberry\perl\bin\perl
my $sysCmd = `reg query "HKLM\\SOFTWARE\\VMware, Inc.\\VMware USB" /v InstallPath`;
print $sysCmd;
^D

HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware USB
    InstallPath    REG_SZ    C:\Program Files (x86)\Common Files\VMware\USB\

其中“ HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware USB”位于 WOW6432Node 中,而驱动程序不在 WOW6432Node 中。

这会影响从 perl 运行的命令和模块。

[为了完整性而编辑] 显然有一种方法可以从 32 位 Perl 获取 64 位密钥,如讨论底部所示http://www.perlmonks.org/?node_id=1007098

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Perl 中的 Windows 注册表读取[重复] 的相关文章

随机推荐

  • 如何在渐变形状上获得色标?编程语言

    如何在形状上获得色标 我正在创建一个树流程图 我想给它们一个渐变 我还想按百分比更改渐变 所以我希望一个节点的两个颜色停止点都为 50 所以到目前为止我所拥有的给出渐变图案的代码是 QNode Shapes 1 Fill TwoColorG
  • PHP 会话在服务器中不起作用

    我正在用 php 设计一个网站 完成后我将内容上传到服务器中 该页面在本地主机中运行良好 但上传后 页面甚至无法加载 在每个页面的顶部我都包含一个名为startsession php 的页面 该页面内容如下 session start he
  • 使用 EF Core 级联删除

    我目前在使用 EF Core 时遇到一些问题 我有一些需要删除的数据 并且我正在努力了解 Fluent API 的工作原理 确切地说是关于 OnDelete 功能 考虑经典的博客 帖子场景微软自己的网站 我想知道什么实体 到底是OnDele
  • ajax调用jquery函数后无法正常工作

    标题 照片 php cmdclose click function var id this id post cmddel php id id setTimeout function
  • 根据日期范围按日/月/周分组

    这是参考这个question 这是我的数据集 rating 4 ceatedAt ISODate 2016 08 08T15 32 41 262 0000 rating 3 createdAt ISODate 2016 08 08T15 3
  • 将 rvmsudo 与 Capistrano 结合使用

    我正在尝试设置 capistrano 来轻松部署我的 Rails3 应用程序 我对 Rails 还很陌生 除了我试图重新启动独立的乘客服务器之外 一切都正常工作 我在同一台服务器上运行redmine 所以我遵循http blog phusi
  • 如何在 C++ Autotools 项目中禁用 C 编译器

    我正处于向 C 库添加 Autotools 支持的早期阶段 此时我正在跑步autoreconf具有以下配置 cat Makefile am AUTOMAKE OPTIONS foreign bin PROGRAMS cryptest cat
  • jQuery Draggable 到基于 iFrame 的 Sortable 的偏移问题

    我在解决与将可拖动元素放入 iFrame 内的可排序区域相关的偏移问题时遇到了很多麻烦 下面的倾斜示例来演示该问题here 确保窗口相当窄 否则很难将元素放入 iFrame 中 很明显 您不能拖动该项目并将其放在指定位置 而是必须将其拖动到
  • SQL LIKE 查询失败 - 准备好的语句中出现致命错误

    我有以下代码 countQuery SELECT ARTICLE NO FROM WHERE upper ARTICLE NAME LIKE if numRecords con gt prepare countQuery numRecord
  • 实体框架支持多线程吗?

    我正在编写一个针对实体框架 6 1 3 的 C NET4 5 控制台应用程序 我使用工作单元范例如下 public class UnitOfWork IUnitOfWork IDisposable private readonly Data
  • cordova平台添加android在JAVA_HOME中出现错误

    我刚刚在 Windows 8 中安装了 cordova 3 3 当我使用命令 cordova platform add android 时 我收到此错误消息 Error failed to run java version make sur
  • Scala slick 2.0 updateAll 相当于 insertALL?

    寻找一种使用 slick 进行批量更新的方法 是否有与 insertALL 等效的 updateAll 到目前为止 古尔的研究让我失败了 我有一个具有不同状态的案例类别列表 每个都有不同的数值 因此我无法运行典型的更新查询 同时 我想保存多
  • 如果 VBA 中出现错误?

    是否可以在 VBA 中使用具有与 Iferror value value if error 或 Iserror value 类似功能的东西 我试着写 If IsError Cells i c curr Then CODE BLOCK 1 e
  • 使用database/sql时如何获取返回的行数?

    给定以下函数 func me OrderService GetOrders orderTx sql Tx orderId int orders sql Rows orders err ecommTx Query SELECT FROM or
  • 如何为nginx配置pem文件?

    我有3个文件 添加信任外部CARoot crt COMODORSAAddTrustCA crt COMODORSADomainValidationSecureServerCA crt 还有一个密钥库 如何创建 pem 文件 我试图将其内容放
  • 警告消息“newdata”有 1 行,但在 R 中找到的变量有 16 行

    我应该使用预测函数来预测何时fjbjor是 5 5 我总是收到此警告消息 我尝试了很多方法 但它总是出现 所以有人能看到我在这里做错了什么吗 这是我的代码 fit lm lt lm fjbjor amagn data bjor summar
  • 缩放和镜像 SVG 对象

    如何最轻松地首先缩放对象 例如当前大小的 2 倍 然后垂直和水平翻转 或两者都翻转 截至目前 我可以设置 scale 2 2 使其变为宽度和高度的 2 倍 但无法与垂直翻转的scale 1 1 同时翻转它 我正在以编程方式创建 SVG 对象
  • 从 html 源中删除所有换行符

    好吧 我知道混淆是个坏主意 但我希望所有的 html 代码都放在一长行中 所有的html标签都是通过PHP生成的 所以我认为这是可能的 我知道替换 n r来自正则表达式 但不知道如何做到这一点 如果我不清楚 这里有一个例子 output p
  • Javascript - 事件监听器无法在外部 js 文件中工作

    我试图删除 html 中的 onClick 标签 并将 EventListener 添加到我的外部 js 文件中 但似乎无法让它工作 以下行有效
  • 从 Perl 中的 Windows 注册表读取[重复]

    这个问题在这里已经有答案了 我试图在不检查一系列硬编码路径的情况下获取程序的安装位置 希望从 Windows 注册表中存储的路径中获取它 但是当我尝试读取所需的键值 我读过关于使用 Perl 解析 Windows 注册表 我想我已经将所有答