设为首页 收藏本站

NSIS中文论坛

查看: 303|回复: 3

[讨论] NSIS v2.51 集成增强版 Getversion 插件

[复制链接]
  • TA的每日心情
    开心
    2018-4-27 09:37
  • 签到天数: 76 天

    [LV.6]常住居民II

    11

    主题

    32

    帖子

    1298

    积分

    积分
    1298
    发表于 2018-2-28 10:17:15 | 显示全部楼层 |阅读模式
    本人刚刚开始学NSIS,总希望一切都更完美些,这样学起来才有干劲,不至于打退堂鼓。NSIS v2.51 集成增强版发布时说明有些插件过旧,有点过于笼统,自己试过的Getversion 插件就耗费了很长的时间才查出该插件过旧。
    name    "判断32位XP操作系统"
    outfile '判断32位XP操作系统.exe'
    Section
    SectionEnd
    Function .onInit
    GetVersion::WindowsName
    Pop $0
    StrCmp $0 "XP" 0 Invalid_OS
    GetVersion::WindowsPlatformArchitecture
    Pop $0
    StrCmp $0 "32" Valid_OS Invalid_OS
    Invalid_OS:
    MessageBox MB_OK "该软件只能安装在32位Windows XP操作系统上。 "
    Valid_OS:
    FunctionEnd
    该脚本在NSIS v2.51 集成增强版编译顺利通过,并且运行正常,结果准确。
    换成检测Windows 7的相应脚本:
    GetVersion::WindowsName
    Pop $0
    StrCmp $0 "7" Valid_OS Invalid_OS
    Invalid_OS:
    MessageBox MB_OK "该软件只能装在Win7系统上。"
    Valid_OS:
           在NSIS v2.51 集成增强版和NSIS v3.03绿色版编译通过,并且可运行,但结果却不正确 -- 即使系统为Win7,亦提示"该软件只能装在Win7系统上。"。经查这两个版本所含的GetVersion.dll插件虽然修改日期不相同,但大小都为5.00 Kb,从http://nsis.sourceforge.net/GetVersion_(Windows)_plug-in页面下载GetVersion.zip (http://nsis.sourceforge.net/mediawiki/images/8/8a/GetVersion.zip) 解压包内大小为6.00 Kb,1.7.0.0版的GetVersion.dll 替换原来的 GetVersion.dll后,编译通过且运行结果正确。
           另外如果想判断系统为XP或Win7,则执行安装程序,否则退出,用了如下脚本,不知是否稳妥,请大家指教。
    GetVersion::WindowsName
    Pop $0
    StrCmp $0 "XP" Valid_OS
    GetVersion::WindowsName
    Pop $1
    StrCmp $1 "7" Valid_OS Invalid_OS
    Invalid_OS:
      MessageBox MB_OK "软件只能在XP或Windows 7系统上安装!"
    Quit
    Valid_OS:
            NSIS v2.51 集成增强版编译通过,Oracle VirtualBox 虚拟机XP和Win7测试通过,但Windows 10 系统下有“可能未正确运行此程序”提示。心里没有底。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    127

    帖子

    663

    积分

    积分
    663

    NSIS元老

    发表于 2018-2-28 11:05:34 | 显示全部楼层
    本帖最后由 jiake 于 2018-2-28 11:14 编辑

    为什么不用 WinVer.nsh 和 x64.nsh 头文件?
    ${If} ${AtLeastWin7}
    ${AndIf} ${RunningX64}
        # 至少是 Windows 7,且 64 位系统。
    ${EndIf}

    ${If} ${AtMostWin7}
    ${AndIf} ${RunningX64}
        # 最多是 Windows 7,且 64 位系统。
    ${EndIf}

    ${If} ${IsWinXP}
    ${AndIfNot} ${RunningX64}
        # 是 Windows XP,且非 64 位系统。
    ${EndIf}
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-27 09:37
  • 签到天数: 76 天

    [LV.6]常住居民II

    11

    主题

    32

    帖子

    1298

    积分

    积分
    1298
     楼主| 发表于 2018-3-1 09:25:10 | 显示全部楼层
    本帖最后由 xt2zsun 于 2018-3-1 09:27 编辑
    jiake 发表于 2018-2-28 11:05
    为什么不用 WinVer.nsh 和 x64.nsh 头文件?
    ${If} ${AtLeastWin7}
    ${AndIf} ${RunningX64}

    谢谢!我用的是启光博客绿化工具(nsis 绿化程序UI源码),其中的!include "UsefulLib.nsh"与 NSIS v2.51 集成增强版的"Winver.nsh"相冲突,所以没有多试。昨天下午依据您的指点,回头又用 NSIS v3.03编译,终于在XP、win7和Win10系统上测试通过。
    ${Unless} ${IsWinXP}
    ${AndUnless} ${IsWin7}
      MessageBox MB_OK "只能安装在Win 7 或 XP系统上!"
    Quit
    ${EndIf}
    代码确实精炼多了。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-6-3 15:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    10

    帖子

    43

    积分

    积分
    43
    发表于 2018-3-6 13:38:55 | 显示全部楼层
    学习了,谢谢~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|NSIS中文论坛    

    GMT+8, 2018-6-19 08:42 , Processed in 0.020799 second(s), 15 queries , MemCache On.

    Powered by Discuz!X3.3

    © 2015-2017 NSISFANS.COM

    快速回复 返回顶部 返回列表