我无法在Windows上运行我的Java应用程序。基本上,我的应用程序获取硬件数据和操作系统信息。为此,我使用Oshi库,但Oshi使用的是JNA库,它不断崩溃。
注意:我的应用程序在任何其他操作系统上运行良好,但无法在Windows上运行。我使用的代码如下:
HardwareAbstractionLayer hal = si.getHardware();
OperatingSystem os = si.getOperatingSystem();
hal.getComputerSystem();
任何帮助都将不胜感激。
发布于 2020-07-27 11:29:13
我是OSHI的作者/主要维护者,也是JNA的提交人。JNA平台类不区分Windows和Windows。OSHI的代码依赖于标准的版本帮助API来确定操作系统对DLL函数的支持。但是,Windows并不表示为单独的版本。
事实上,Windows并不是设计成一个独立的操作系统。它的用途(和授权用途)非常有限。来自Windows PE文档 (重点雷):
Windows不是一个通用的操作系统.除部署和恢复以外,不得用于任何其他用途。
此外,
为了防止作为生产操作系统使用,Windows自动停止运行外壳程序,并在连续使用72小时后重新启动。
本质上,Windows 10 API中的一些功能在PE中不存在。来自这些微软文档
API兼容性参考 Windows PE是一个轻量级的引导操作系统,它基于Windows操作系统中的一个组件子集。它旨在承载部署和恢复应用程序。因此,它包含了许多Windows二进制文件,这些二进制文件是托管对这些应用程序类最重要的app所必需的。由于大小和其他设计限制,Windows中并不存在所有的二进制文件,因此并不是所有的Windows都存在或可用的。
这是WinPE的一个特性,而不是一个bug。
OSHI被设计成一个跨平台的图书馆来提供信息。它不是一个“部署和恢复”应用程序。OSHI链接(通过JNA)到标准Windows (如Kernel32
),而WinPE有它的拥有一组MinCore DLL。
Windows PE非常轻量级,非常特定于Windows操作系统系列,非常特定于部署和恢复任务。
您可能应该使用命令行或Powershell工具来获取“部署和恢复”( WinPE的唯一授权用途)所需的操作系统和硬件信息。OSHI的ExecutingCommand
类是一个很好的实用类,用于将命令行响应作为Java处理,欢迎您在您自己的Java项目中进行复制和使用,而不需要整个OSHI/JNA依赖项的开销。
如果您可以指定"JNA正在崩溃“的特定点,我可以帮助您确定处理可能引发的任何异常的方法。或者,您可以在OSHI项目中提交一个问题/特性请求,以识别这些故障,以使其对PE环境更加健壮,尽管“更健壮”可能以“避免崩溃”的形式出现,而不是提供WinPE中Windows无法提供的信息。最后,您可以选择提出您的问题,以便在JNA邮件列表上进行扩展讨论。
发布于 2020-07-27 04:39:30
据我所知,Oshi不支持Windows:
这些事实都不是决定性的,但综合起来,他们描绘了一个清晰的画面。
这并不是说Oshi不能支持Windows。但是要取得一些进展,你需要提供更多的细节;例如,告诉我们它是如何崩溃的。
https://stackoverflow.com/questions/63115077
复制