微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 NSIS 中检测 Windows 7

如何解决如何在 NSIS 中检测 Windows 7

现在我们使用的是窗体。 NSIS 用于 Windows 窗体安装。但我需要在 Windows 7 操作系统中阻止安装。怎么做?我正在使用以下代码

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_TYPE "Home"    ; Home/Clinic ------
!define CONfig_TYPE "Prod"    ; Release/Local/Devl/Devl_Test/Demo/Test/Prod ------
!define PRODUCT_NAME "nQ Medical ${PRODUCT_TYPE} Keyboard"
!define PRODUCT_VERSION "1.2.0"
!define PRODUCT_PUBLISHER "nQ Medical Inc."
!define PRODUCT_WEB_SITE "https://platform.nq-medical.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${APP_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define APP_NAME "nQKeyboard.exe"

; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "nQKeyboard\iconNQ.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

RequestExecutionLevel admin

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "nQKeyboard\bin\${CONfig_TYPE}\EULA.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\${APP_NAME}"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "English"
; MUI end ------

Name "${PRODUCT_NAME}"
;Currently deploys the installer file to a 'Published' sub-directory in the 'Solution' directory
OutFile "Published\nQ Medical ${PRODUCT_TYPE} Keyboard.exe"
InstallDir "$PROGRAMFILES\nQ Medical Keyboard"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show

Section "MainSection" SEC01
  ; Kill the running application
  ExecWait "TaskKill /IM ${APP_NAME} /F"
  SetoutPath "$INSTDIR"
  Setoverwrite try
  File "nQKeyboard\bin\${CONfig_TYPE}\iconNQ.ico"
  File "nQKeyboard\bin\${CONfig_TYPE}\Newtonsoft.Json.dll"
  File "nQKeyboard\bin\${CONfig_TYPE}\RestSharp.dll"
  File "nQKeyboard\bin\${CONfig_TYPE}\RestSharp.Serializers.NewtonsoftJson.dll"
  File "nQKeyboard\bin\${CONfig_TYPE}\GraphQL.Client.dll"
  File "nQKeyboard\bin\${CONfig_TYPE}\GraphQL.Common.dll"
  File "nQKeyboard\bin\${CONfig_TYPE}\EULA.txt"
  File "nQKeyboard\bin\${CONfig_TYPE}\${APP_NAME}"
  CreateDirectory "$SMPROGRAMS\nQ Medical Keyboard"
  CreateShortCut "$SMPROGRAMS\nQ Medical Keyboard\nQ Medical Keyboard.lnk" "$INSTDIR\${APP_NAME}"
  CreateShortCut "$DESKTOP\nQ Medical Keyboard.lnk" "$INSTDIR\${APP_NAME}"
  File "nQKeyboard\bin\${CONfig_TYPE}\${APP_NAME}.config"
SectionEnd.

那么如何添加代码段呢? IE;如果 Windows 7 是 o.s.然后安装不会发生。执行脚本时显示错误消息。怎么做?

解决方法

NSIS 提供了 WinVer.nsh 头文件,可帮助您检测各种 Windows 版本。

版本检测一开始可能看起来很简单,但很容易出错,而且您的问题并没有提供足够的信息来写出明确的答案!

对您的问题的幼稚答案是

COPY ["docker.Sample.csproj","docker.Sample/"]

这乍一看似乎没问题,但假设您的应用程序由于某些技术原因无法在 Windows 7 上运行,那么您可能还需要阻止 Server 2008 R2,因为它基本上与 Windows 版本相同:

!include WinVer.nsh

Function .onInit
${If} ${IsWin7}
    MessageBox MB_ICONSTOP "Windows version blah blah!"
    SetErrorLevel 1150 ; ERROR_OLD_WIN_VERSION
    Quit
${EndIf}
FunctionEnd

大多数情况下,您有一些您支持的最低版本的 Windows,您确实应该阻止任何更旧的版本。最好的方法是确保您使用的是您支持的版本:

${If} ${IsWin7}
${OrIf} ${IsWin2008R2}
  ...

如果您真的很熟悉各种 Windows 版本号,也可以直接查看:

!include WinVer.nsh

Function .onInit
${IfNot} ${AtLeastWin8}
    MessageBox MB_ICONSTOP "Windows version blah blah!"
    SetErrorLevel 1150 ; ERROR_OLD_WIN_VERSION
    Quit
${EndIf}
FunctionEnd

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。