我的基于NSIS的安装程序将某个.exe文件部署到所有Windows平台的目标文件夹中。我们最近发现,如果我们在Windows 8上安装,我们需要部署稍微不同版本的.exe文件。
我们不希望有两个安装程序。 我们宁愿有一个“保存”两个.exe文件的安装程序,并为windows8部署正确的文件,为其余文件部署另一个.exe文件。
关于我们如何实现这一目标的任何指示?在安装时检测windows8,在我们检测到它时复制不同版本的.exe文件?
感谢。
答案 0 :(得分:2)
您可以通过添加NSIS提供的LogicLib.nsh
和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
的标题以获取更多示例。
答案 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