两个针对不同操作系统的.exe版本

时间:2012-10-24 15:25:47

标签: nsis

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

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

您可以通过添加NSIS提供的LogicLib.nshWinVer.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的标题以获取更多示例。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我知道这已经很老了,但是如果有人遇到>>> class Foo(object): ... def __new__(cls): ... print "New" ... return object.__new__(cls) ... >>> foo = Foo() New >>> pickle.loads(pickle.dumps(foo, protocol=0)) <__main__.Foo object at 0x00000000025E9A20> >>> pickle.loads(pickle.dumps(foo, protocol=2)) New <__main__.Foo object at 0x00000000022A3F60> 命令的问题,这是预期的语法:

File