仅对于某些版本的Windows,我才需要执行一些安装步骤-如果不是,则只说10。该脚本用于电子生成器(19.55.1) 如何更改我的nsh脚本以实现此目的?从nsis Wiki挑选的用于获取版本的代码没有帮助。在确定以下脚本的问题时需要帮助。 更好的是,是否有一种更简单/更易读的方式来执行此操作?在Windows 10上,winver.nsh似乎没有达到要求(至少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
答案 0 :(得分:0)
我假设您注释了;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支持。