【问题标题】:nsis script fails to build in electron-buildernsis 脚本无法在电子生成器中构建
【发布时间】:2019-01-03 00:03:03
【问题描述】:

只有在某些版本的 Windows 上,我才需要进行一些安装步骤 - 仅在不是 10 时才说。该脚本用于电子生成器 (19.55.1) 的上下文中 如何更改我的 nsh 脚本以实现此目的?从 nsis wiki 获取版本的代码没有帮助。在确定以下脚本有什么问题时需要帮助。 更好的是,有没有更简单/更易读的方法?看起来 winver.nsh 在 Windows 10 上不符合要求(至少 nsis 文档没有声明)

以下是我当前的脚本,它根本无法在电子生成器中编译。

!include LogicLib.nsh
!include x64.nsh

Function GetWindowsVersion

Push $R0
Push $R1

; check if Windows 10 family (CurrentMajorVersionNumber is new introduced in Windows 10)
ReadRegStr $R0 HKLM \
  "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentMajorVersionNumber

StrCmp $R0 '' 0 lbl_winnt

ClearErrors

; check if Windows NT family
ReadRegStr $R0 HKLM \
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion

IfErrors 0 lbl_winnt

; we are not NT
ReadRegStr $R0 HKLM \
"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber

StrCpy $R1 $R0 1
StrCmp $R1 '4' 0 lbl_error

StrCpy $R1 $R0 3

StrCmp $R1 '4.0' lbl_win32_95
StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98

lbl_win32_95:
  StrCpy $R0 '95'
Goto lbl_done

lbl_win32_98:
  StrCpy $R0 '98'
Goto lbl_done

lbl_win32_ME:
  StrCpy $R0 'ME'
Goto lbl_done

lbl_winnt:

StrCpy $R1 $R0 1

StrCmp $R1 '3' lbl_winnt_x
StrCmp $R1 '4' lbl_winnt_x

StrCpy $R1 $R0 3

StrCmp $R1 '5.0' lbl_winnt_2000
StrCmp $R1 '5.1' lbl_winnt_XP
StrCmp $R1 '5.2' lbl_winnt_2003
StrCmp $R1 '6.0' lbl_winnt_vista
StrCmp $R1 '6.1' lbl_winnt_7
StrCmp $R1 '6.2' lbl_winnt_8
StrCmp $R1 '6.3' lbl_winnt_81
;StrCmp $R1 '10' lbl_winnt_10_2016

StrCpy $R1 $R0 4

StrCmp $R1 '10.0' lbl_winnt_10
Goto lbl_error

lbl_winnt_x:
  StrCpy $R0 "NT $R0" 6
Goto lbl_done

lbl_winnt_2000:
  Strcpy $R0 '2000'
Goto lbl_done

lbl_winnt_XP:
  Strcpy $R0 'XP'
Goto lbl_done

lbl_winnt_2003:
  Strcpy $R0 '2003'
Goto lbl_done

lbl_winnt_vista:
  Strcpy $R0 'Vista'
Goto lbl_done

lbl_winnt_7:
  Strcpy $R0 '7'
Goto lbl_done

lbl_winnt_8:
  Strcpy $R0 '8'
Goto lbl_done

lbl_winnt_81:
  Strcpy $R0 '8.1'
Goto lbl_done

lbl_winnt_10:
  Strcpy $R0 '10.0'
Goto lbl_done

lbl_error:
  Strcpy $R0 ''
lbl_done:

Pop $R1
Exch $R0
FunctionEnd

!macro customInstall
${GetWindowsVersion} $R0
${IfNot} $R0 == 10
${If} ${RunningX64}
; Do something
${Else}
; Do something
${EndIf}
${EndIf}
!macroend

【问题讨论】:

  • 错误信息是什么? Windows 10 支持已添加到 WinVer a while ago
  • 谢谢。我没有检查 Winver 的文档。 nsis 声明仅支持 8.1。 Winver 解决了这个问题。

标签: nsis electron-builder


【解决方案1】:

我假设您注释掉了 ;StrCmp $R1 '10' lbl_winnt_10_2016 行?尝试添加该行,但将 lbl_winnt_10_2016 更改为 lbl_winnt_10

要调试事物,您可以在该代码的不同位置添加MessageBox mb_ok "R0=$R0,R1=$R1" 调用,并查看StrCpy 之后的值,看看它们在StrCmp 中比较时是否有意义。

WinVer.nsh 在 NSIS v3.0b2 (2015) 中获得了 Windows 10 支持。

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 2017-07-05
    • 2017-06-13
    • 1970-01-01
    • 2017-04-02
    • 2018-09-06
    • 2018-12-31
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多