我的基于 NSIS 的安装程序将某个 .exe 文件部署到所有 Windows 平台的目标文件夹中。我们最近发现,如果我们在 Windows 8 上安装,我们需要部署一个稍微不同版本的 .exe 文件。
我们不想有两个安装程序。我们宁愿有一个安装程序来“保存”两个 .exe 文件,并为 windows8 部署正确的一个,为其余的部署另一个 .exe。
关于我们如何实现这一目标的任何指示?在安装时检测windows8,当我们检测到它时复制不同版本的.exe文件?
谢谢。
我的基于 NSIS 的安装程序将某个 .exe 文件部署到所有 Windows 平台的目标文件夹中。我们最近发现,如果我们在 Windows 8 上安装,我们需要部署一个稍微不同版本的 .exe 文件。
我们不想有两个安装程序。我们宁愿有一个安装程序来“保存”两个 .exe 文件,并为 windows8 部署正确的一个,为其余的部署另一个 .exe。
关于我们如何实现这一目标的任何指示?在安装时检测windows8,当我们检测到它时复制不同版本的.exe文件?
谢谢。
LogicLib.nsh
您可以通过包含 NSIS 提供的和WinVer.nsh
脚本来非常精确地测试平台。
这是我正在使用的一个函数,我在安装应用程序之前进行了一些健全性检查:
Function CheckUnsupportedPlatform
${if} ${AtLeastWin95}
${AndIf} ${AtMostWinME}
;NT4 and W95 use the same version number, we can use ${IsNT} if we need precise identification
MessageBox MB_OK|MB_ICONEXCLAMATION "Sorry, but your version of Windows is unsupported platform.$\n\
Supported platforms are currently 2000 / XP / 2003 / Vista / Seven$\n \
Cannot continue the installation." /SD IDOK
abort
${elseIf} ${isWin2008}
${orIf} ${AtLeastWin2008R2}
MessageBox MB_OK|MB_ICONINFORMATION "Please note that support for Windows 2008 and Windows 8 is in beta stage.$\n\
Supported platforms are currently 2000 / XP / 2003 / Vista / Seven" /SD IDOK
${endif}
FunctionEnd
还有更多可能性,请查看标题以WinVer.nsh
获取更多示例。
我在 nsis 上遇到了类似的问题,检测到不同的 Windows 版本。我刚刚编写了一个三行 C++ 应用程序来调用 Windows API 以找出操作系统版本,然后将控制台输出写为字符串。从 nsis 中,您可以将这个输出读入一个变量,然后根据这个变量的值进行切换。
我知道这已经很老了,但如果有人遇到File
命令问题,这是预期的语法:
!include "WinVer.nsh"
...
; The stuff to install
Section "MyProgram (required)"
${If} ${AtMostWin2003}
File /oname=MyFile.exe "MyFile2003.exe"
${Else}
File "MyFile.exe"
${EndIf}
SectionEnd