InstallShield检测Windows 10及以上版本异常问题求助
解决InstallShield中VersionNT检测Windows 10及以上版本不准确的问题
这个坑我之前踩过!你遇到的问题根源在于Windows的兼容性机制:从Windows 10开始,微软为了让旧的安装包程序能正常运行,默认会把VersionNT属性映射为603(对应Windows 8.1的版本号),而InstallShield默认遵循了这个行为,所以才会出现Win10和Win8.1返回相同值的情况。
给你两种可靠的解决方法:
方法一:使用InstallShield的VersionNT_W属性
VersionNT_W是InstallShield提供的专门用来获取未被兼容性映射的真实Windows版本号的属性,它不会被系统的兼容性机制篡改。修改你的函数如下:
function BOOL isWindows10OrGreater() STRING svWindowsValue; NUMBER nWindowsValue; NUMBER nBuffer; begin try nBuffer = 256; // 替换为VersionNT_W获取真实版本 MsiGetProperty(ISMSI_HANDLE, "VersionNT_W", svWindowsValue, nBuffer); StrToNum(nWindowsValue, svWindowsValue); // Windows 10对应1000,Windows 11对应1001,Win8.1是603 return (nWindowsValue >= 1000); catch // 异常情况下默认返回false,避免安装出错 return FALSE; endcatch; end;
方法二:直接调用InstallScript的系统版本函数
InstallScript自带的SysGetOSVersion函数可以直接获取系统的真实主版本、次版本和构建号,完全绕开兼容性映射的问题,代码更简洁:
function BOOL isWindows10OrGreater() NUMBER nMajorVersion, nMinorVersion, nBuildNumber; begin SysGetOSVersion(nMajorVersion, nMinorVersion, nBuildNumber); // Windows 10及以上系统的主版本号都是10 return (nMajorVersion >= 10); end;
这两种方法都能准确区分Windows 10/11和更早的系统,推荐第二种,代码更简洁且不容易出错。
内容的提问来源于stack exchange,提问作者Munavvar
相关产品推荐
相关产品推荐

