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



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

注意:我的应用程序在其他操作系统上运行良好,但无法在Windows PE上运行。我使用的代码如下:

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

任何帮助都将不胜感激。

我是OSHI的作者/主要维护者,也是JNA的提交者。JNA的平台类不区分Windows和Windows PE。OSHI的代码依赖于标准的Windows版本助手API来确定操作系统对DLL函数的支持。但是,Windows PE并没有显示为单独的版本。

事实上,WindowsPE并不是设计成一个独立的操作系统。其用途(以及授权使用(非常有限。来自Windows PE文档(强调矿(:

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

此外,

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

从本质上讲,Windows 10 API中提供的一些功能在PE中不存在。来自这些Microsoft文档:

API兼容性参考

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

这是WinPE的一个功能,而不是一个bug。

OSHI被设计成一个跨平台的库来提供信息。它不是一个";部署和恢复";应用程序。OSHI链接(通过JNA(到标准的Windows DLL,如Kernel32,而WinPE有自己的一组MinCore DLL。

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

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

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

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

  • Oshi常见问题解答没有提到Windows PE作为支持。对于Windows,它列出了:

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

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

  • 当我在谷歌上搜索";oshi窗口pe";,没有出现任何相关内容。

  • 代码库中有一个属性文件,它将Windows操作系统ID映射到名称。它没有提到任何Windows PE版本号。

  • JNA库文档中没有提到WindowsPE.

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


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

相关内容

最新更新