是否有一种编程方法(一个软件是理想的,但任何可以在 Windows 10 下运行的东西都可以)来分析 Windows 软件并判断程序将在哪个最旧和最新版本的 Windows 下运行?理论上 - 我知道无论如何做都不会具有完美的准确性。
或者相反,除了复杂性和过时性之外,是否还存在一些根本无法实现的原因?
我曾成功使用 Depends 来处理比 WinXP 更老的软件,但未能成功处理现代编译和链接。在自己的虚拟机中安装每个操作系统有点极端,但这可能是最后的手段。而且在大多数情况下,除了安装包中的信息(如果有的话),没有关于该软件的任何信息。
答案1
最大的问题是每个操作系统都有一组要求以及一组它支持和不支持的内容。
尽管程序尝试向后兼容,但新操作系统与旧操作系统存在根本差异,因此不可能同时支持这两种操作系统。
例如,Windows 3.1 是一个 16 位操作系统。Windows 95 是 32 位,但向后兼容 16 位。在 Windows XP 中,添加了 64 位支持,但不再支持 16 位,因此引入了一个仿真层,该仿真层在大多数情况下有效,但并非总是有效。在 Windows 7 中,16 位支持被完全放弃,等等。
然后,您会看到诸如 .net Framework 之类的东西,其中较新的版本是为特定操作系统构建的,无法在较旧的操作系统上运行。如果某个应用程序是为旧的 .net 框架编译的,而某个时候,较新的版本是为较新的 .net 框架编译的,那么该应用程序突然就无法再在较旧的 Windows 版本上运行了。
此外,硬件也会发生变化,驱动程序通常只针对部分操作系统版本制作,而不是全部。制造商通常会在特定日期之前更新驱动程序,但如果在该日期之后推出了新操作系统,则驱动程序不会更新,因此该设备将无法在较新的操作系统上运行。
长话短说,要做到这一点非常复杂,您可以扫描依赖项,但从来没有保证或万无一失的方法可以做到这一点。一些开发人员在他们的网站上列出了它,但即使这样也不一定 100% 准确。