Windows 10未在installshield上检测到

时间:2018-03-17 12:15:54

标签: 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;

1 个答案:

答案 0 :(得分:3)

Windows 10 - 版本奇怪

免责声明 此信息是我目前所知的最新信息(请查看上次修改日期)。这个问题有点像“移动目标” - 对于每个操作系统版本来说,事情似乎都会略有改变

这对我来说也是新闻,但似乎检测到Windows 10现在是一个相当特殊的事情,因为Win32核心调用不再保证报告实际的Windows版本 - VersionNT或{VersionNT64 {1}}在我的盒子上。他们都报告603(Win 8 SP1)。解释如下:VersionNT value for Windows 10 and Windows Server 2016

清单&版本 :此处是否显示您的应用程序至关重要。我不会重复解释,而是链接到这个(必读):C++ How to detect Windows 10

“Evergreen Versionlessness” :在Microsoft的理由上(打击版本检查 - 链接到特定评论):Getting Windows OS version programmatically。所以我想问的问题是你是否应该进行这样的版本检查 - 或者他们想让我们相信。

Installshield 2015/2018

我没有Installshield可用于测试这些功能:

变通?

我想强调一下这些都是变通办法。我们应该检查这些天的功能,而不是操作系统版本。请彻底测试。我想用一些“英特尔”来交换类似的答案:VersionNT MSI property on Windows 10

  1. 操作系统文件版本 :MSDN建议获取密钥操作系统文件的版本,以确定您是否使用的是Windows 10:Getting the system version。似乎有an implementation of this in the bottom function here(未经测试)。

  2. WindowsBuild属性 :看起来WindowsBuild property可能有用。它在我的Windows 10系统上报告9600MSDN documentation for WindowsBuild具有不同OS版本的不同值。请记住,此值将随新版本一起增加,因此您无法执行相等的比较条件。你必须做同等或更高。 这是我目前所知的全部

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

  4. WMI I see suggestions to use WMI(我没有经过适当的测试 - 只列出那些可以验证测试机器的人的所有选项)

  5. 链接

    以下是一些进一步的链接。它们不是建议,也不是用于汇总上述信息的一堆链接 - 因此它们用于“保管”。我将原样留下他们。这里和那里可能存在一些不准确之处: