使用Oshi Java库获取Windows PE的硬件和操作系统信息

使用Oshi Java库获取Windows PE的硬件和操作系统信息,java,jna,winpe,oshi,Java,Jna,Winpe,Oshi,我无法在Windows PE上运行Java应用程序。基本上,我的应用程序获取硬件数据和操作系统信息。为此,我使用OSHIJava库,但Oshi使用JNA库,它不断崩溃 注意:我的应用程序在任何其他操作系统上都可以正常运行,但无法在Windows PE上运行。我使用的代码如下所示: HardwareAbstractionLayer hal = si.getHardware(); OperatingSystem os = si.getOperatingSystem(); hal.getComput

我无法在Windows PE上运行Java应用程序。基本上,我的应用程序获取硬件数据和操作系统信息。为此,我使用OSHIJava库,但Oshi使用JNA库,它不断崩溃

注意:我的应用程序在任何其他操作系统上都可以正常运行,但无法在Windows PE上运行。我使用的代码如下所示:

HardwareAbstractionLayer hal = si.getHardware();
OperatingSystem os = si.getOperatingSystem();

hal.getComputerSystem();

任何帮助都将不胜感激。

据我所知,Oshi不支持Windows PE:

  • Oshi FAQ没有提到Windows PE作为支持。对于Windows,它列出了:

    Windows7及更高版本。(几乎所有功能都适用于Vista,大多数适用于Windows XP。)

  • 我在Oshi问题跟踪程序中未发现提及Windows PE的问题

  • 当我在谷歌上搜索“oshi windows pe”时,没有任何相关信息显示出来

  • 代码库中有一个将Windows操作系统ID映射到名称的方法。它没有提到任何Windows PE版本号

  • JNA库文档没有提到Windows PE

所有这些事实都不是决定性的,但综合起来,它们描绘了一幅清晰的画面



这并不是说Oshi不能支持Windows PE。但要取得一些进展,你需要提供更多的细节;e、 g.告诉我们它是如何崩溃的。

我是OSHI的作者/主要维护者,也是JNA的提交者。不区分Windows和Windows PE。OSHI的代码依赖于标准Windows来确定OS对DLL函数的支持。但是,Windows PE并不是单独的版本

事实上,Windows PE并非设计为独立操作系统。其用途(和授权使用)非常有限。从(我的)重点:

Windows PE不是通用操作系统除部署和恢复外,不得将其用于任何目的。

此外

为了防止将其用作生产操作系统,Windows PE会自动停止运行shell,并在连续使用72小时后重新启动

本质上,Windows 10 API中的一些可用功能在PE中不存在。发件人:

API兼容性参考

Windows PE是一个基于Windows操作系统组件子集的轻量级引导式操作系统。它旨在托管部署和恢复应用程序。因此,它包含许多Windows二进制文件,这些文件是托管这些类应用程序最重要的API所必需的。由于大小和其他设计限制,并非所有Windows二进制文件都存在于Windows PE中,因此并非所有Windows API都存在或可用

这是WinPE的一个特性,而不是一个bug

OSHI被设计成一个跨平台的图书馆来提供信息。它不是“部署和恢复”应用程序。OSHI(通过JNA)链接到标准的Windows DLL,如
Kernel32
,而WinPE有自己的功能

Windows PE旨在非常轻量级,非常特定于Windows操作系统系列,并且非常特定于部署和恢复任务

您可能应该使用命令行或工具获取“部署和恢复”(WinPE的唯一授权使用)所需的操作系统和硬件信息。OSHI的类是一个很好的实用程序类,用于将命令行响应作为Java字符串处理,欢迎您在自己的Java项目中复制和使用它,而不需要整个OSHI/JNA依赖项的开销

如果您可以指定“JNA正在崩溃”的特定点,我可以帮助您确定解决可能引发的任何异常的方法。或者,您可以在OSHI项目中提交问题/功能请求,以识别这些故障,使其对PE环境更为健壮,尽管“更健壮”的形式可能是“避免崩溃”,而不是提供WinPE中Windows API无法提供的信息。最后,您可以选择在JNA邮件列表上提出您的问题进行扩展讨论