4

我的基于 NSIS 的安装程序将某个 .exe 文件部署到所有 Windows 平台的目标文件夹中。我们最近发现,如果我们在 Windows 8 上安装,我们需要部署一个稍微不同版本的 .exe 文件。

我们不想有两个安装程序。我们宁愿有一个安装程序来“保存”两个 .exe 文件,并为 windows8 部署正确的一个,为其余的部署另一个 .exe。

关于我们如何实现这一目标的任何指示?在安装时检测windows8,当我们检测到它时复制不同版本的.exe文件?

谢谢。

4

3 回答 3

2

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获取更多示例。

于 2012-10-24T16:46:57.207 回答
1

我在 nsis 上遇到了类似的问题,检测到不同的 Windows 版本。我刚刚编写了一个三行 C++ 应用程序来调用 Windows API 以找出操作系统版本,然后将控制台输出写为字符串。从 nsis 中,您可以将这个输出读入一个变量,然后根据这个变量的值进行切换。

于 2012-10-24T15:29:31.240 回答
0

我知道这已经很老了,但如果有人遇到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
于 2016-04-17T03:20:26.923 回答