NSIS检测Windows版本

saz*_*azr 7 installer nsis

在NSIS中有一种方法可以确定用户当前运行的Windows版本吗?

我想这样做的原因是因为我的安装程序在Windows XP计算机上看起来不同.我的安装程序使用MUI2,但我似乎没有像在Windows 7中那样使用相同的GUI按钮(我认为它称为XP风格),主安装程序窗口比Windows 7(大约500 x 400像素)大得多.在使用MUI2的安装程序中存在这些差异是否正常? 我认为MUI2在Windows XP版本中看起来一致吗?

为了克服安装程序窗口大小的差异,我的解决方案是检测用户是否使用Windows XP并相应地调整窗口大小.这可能吗?

我需要让窗口具有特定的大小,因为我有一个背景图像,图像是500px宽,所以如果安装程序窗口更大,我有一个空白的差距.我可以将背景图像更改为更宽,但对我自己来说最简单的解决方案是我上面解释的那个

Dan*_*ann 7

如果安德斯的回答不够明确(花了几个小时才能做到正确),这里有一个更"初学者友好"的版本.

您需要添加!include WinVer.nsh到cd.nsi文件的顶部.

然后你可以使用这样的代码:

${If} ${IsWinXP}
     MessageBox MB_OK|MB_ICONEXCLAMATION "We have Win XP"
${EndIf}
Run Code Online (Sandbox Code Playgroud)

这是我测试的唯一功能,但WinVer.nsh文件以带有其功能的迷你手册开头,其中包括:

  • AtLeastWin<version> 它检查安装程序是否至少在指定的Windows版本上运行.
  • IsWin<version> 它会检查安装程序是否在Windows版本上完全按照指定运行.
  • AtMostWin<version> 它会检查安装程序是否在指定的Windows版本上运行.

<version>可以用下面的值替换(也许更多,这取决于你的WinVer.nsh文件的新旧程度): ,95, 98, ME, NT4, 2000, XP, 2003, Vista, , 2008 72008R2

WinVer.nsh文件中还有一些函数和一些用法示例,它们可能位于C:\ Program Files\NSIS\Include之类的地方,如:

  • AtLeastServicePack 它至少按照指定检查安装程序是否在Windows Service Pack版本上运行.
  • IsServicePack 它会检查安装程序是否完全按照指定在Windows Service Pack版本上运行.
  • AtMostServicePack 它会检查安装程序是否最多按指定在Windows服务版本包上运行.
  • IsWin2003R2 (没有提供更多细节)
  • IsStarterEdition (没有提供更多细节)
  • OSHasMediaCenter (没有提供更多细节)
  • OSHasTabletSupport (没有提供更多细节)

  • 注意:根据 http://nsis.sourceforge.net/Get_Windows_version 页面,“WinVer.nsh”已经相当过时了。最好添加[页面下方](http://nsis.sourceforge.net/Get_Windows_version#Alternate_Script_With_Server_Versions)的“GetWindowsVersion”函数。它已扩展到匹配 Windows 10 / Server 2016。只需将脚本复制并粘贴到“.nsi”文件的顶部即可。然后您可以通过 `${GetWindowsVersion} $R0`、`StrCmp $R0 "10.0" win10 not_win10` 来比较输出(如果您已完成升级,您也可以在期望 Windows 10 时获得 Windows 7 / 8.1)。 (2认同)

And*_*ers 5

MUI不会根据Windows版本调整窗口大小。但是,窗口大小受字体和DPI设置的影响。

使用WinVer.nsh来检测Windows版本。默认情况下,此模块包含在NSIS包含文件夹中。