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

时间:2020-07-27 12:12:35

标签: java jna winpe oshi

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

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

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

hal.getComputerSystem();

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

我是OSHI的作者/主要维护者,也是JNA的提交者。 JNA's Platform class不能区分Windows和Windows PE。 OSHI的代码依赖于标准Windows Version Helper API来确定OS对DLL功能的支持。但是,未将Windows PE指示为单独的版本。

实际上,Windows PE并非设计为独立的操作系统。其目的(和授权使用)非常有限。来自Windows PE docs(重点是我):

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

进一步

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

本质上,Windows 10 API中可用的某些功能在PE中不存在。来自these Microsoft docs

API兼容性参考

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

这是WinPE的功能,而不是错误。

OSHI被设计为提供信息的跨平台库。它不是“部署和恢复”应用程序。 OSHI(通过JNA)链接到标准Windows DLL,例如Kernel32,而WinPE则具有own set of MinCore DLLs

Windows PE的目标是非常轻巧,非常适合Windows操作系统家族,非常适合于部署和恢复任务。

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

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

答案 1 :(得分:2)

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

  • Oshi常见问题解答未提及Windows PE作为支持。对于Windows,它列出:

    Windows 7及更高版本。 (几乎所有功能都可以在Vista上使用,而大多数功能都可以在Windows XP上使用。)

  • 我在Oshi问题跟踪器中没有发现涉及Windows PE的问题

  • 当我搜索“ oshi windows pe”时,没有任何相关信息。

  • 代码库中有一个property file,用于将Windows操作系统ID映射到名称。它没有提及任何Windows PE版本号。

  • JNA库文档没有提及Windows PE。

这些事实中没有一个是结论性的,但总的来说,它们描绘了一幅清晰的图画。


这并不是说Oshi不支持Windows PE。但是要取得一些进展,您需要提供更多详细信息。例如告诉我们如何崩溃。