Windows 10无法在InstallShield上检测到

Mun*_*var 1 windows-installer installshield installscript

要求在安装时检测Windows 10或更高版本。为此,我创建了以下功能。

它在Windows 10和Windows 8.1中给我603(AS VersionNT值)。那是错的。

还有其他方法可以做到这一点吗?

function BOOL isWindows10OrGreater()
 STRING svWindowsValue;
 NUMBER nWindowsValue;
 NUMBER nBuffer;
begin
     try
       nBuffer = 256;
       MsiGetProperty(ISMSI_HANDLE,"VersionNT",svWindowsValue,nBuffer);
       StrToNum(nWindowsValue,svWindowsValue);
       return (nWindowsValue >= 603);
     catch
       return FALSE;
    endcatch;
 end;
Run Code Online (Sandbox Code Playgroud)

Ste*_*mul 5

Windows 10-版本异常


免责声明:据我所知,此信息到目前为止(请检查最后编辑日期)。这个问题有点像“移动的目标”-对于每个OS版本,情况似乎都略有变化


这对我来说也是个新闻,但是由于不再保证核心Win32调用不再能够报告实际的Windows版本,因此检测Windows 10现在似乎是一件很奇怪的事情-不在我家VersionNT或不在VersionNT64我的盒子上。他们都报告603(这是Win 8 SP1)。说明在这里:Windows 10和Windows Server 2016的VersionNT值

清单和版本:在这里,是否显示您的应用程序至关重要。我将不重复说明,而是链接到该内容(必读): C ++如何检测Windows 10

“ Evergreen Versionlessness”:在Microsoft上,这样做的理由(有效的版本检查-指向特定注释的链接):以编程方式获取Windows OS版本。因此,我想的问题是,您是否应该进行这样的版本检查-还是让他们希望使用。


Installshield 2015年/ 2018年

我没有可用于测试以下功能的Installshield:


解决方法?

我想强调的是,这些只是解决方法,仅此而已。这些天我们应该检查功能,而不是OS版本。请彻底测试。我想将类似的答案与某些“ intel”进行交叉链接:Windows 10上的VersionNT MSI属性

  1. 操作系统文件版本:MSDN建议获取关键操作系统文件的版本,以确定您是否在Windows 10上:获取系统版本。似乎在此的底部函数中一个实现(未试用)。

  2. WindowsBuild属性:看起来 WindowsBuild属性可能是可用的。它9600在我的Windows 10系统上报告。WindowsBuild的MSDN文档,针对不同的OS版本具有不同的值。请记住,该值将随着新版本的增加而增加,因此您不能执行相等的比较条件。您必须等于或更高。到目前为止,就我所知这一切

  3. 注册表:也许还可以选择读取这些新注册表值,以确定您是否在Window 10上?天堂知道他们将来会如何处理这些键吗?他们“稳定”吗?

  4. WMI我看到使用WMI的建议(未经我正确测试-仅列出可供测试机器验证的所有可能选项)。


链接

这里是一些其他链接。它们不是建议,而是用于组合以上信息的大量链接-因此此处用于“保管”。我将保持原样。到处可能存在一些错误: