NSIS条件语句

NSIS条件语句,nsis,conditional-statements,Nsis,Conditional Statements,我正在编写一个脚本代码,其中安装了3个驱动程序。每次安装驱动程序时,如果安装成功,我都会收到一个返回码“256”或“1”,如果安装失败,则会收到一个不同的返回码。我需要检查所有安装是否成功完成,因此我使用以下代码: 即使驱动程序安装失败,我也会收到消息“安装成功!”。有人能帮我找到上面代码中的错误吗?在您的示例代码中,第一个${If}使用的是$2,而它可能应该选中$1 我认为您不应该在同一个if块中使用OrIf和AndIf,如果像这样,结果可能是未定义的 也可以编写自己的自定义LogicLi

我正在编写一个脚本代码,其中安装了3个驱动程序。每次安装驱动程序时,如果安装成功,我都会收到一个返回码“256”或“1”,如果安装失败,则会收到一个不同的返回码。我需要检查所有安装是否成功完成,因此我使用以下代码:


即使驱动程序安装失败,我也会收到消息“安装成功!”。有人能帮我找到上面代码中的错误吗?

在您的示例代码中,第一个
${If}
使用的是
$2
,而它可能应该选中
$1

我认为您不应该在同一个if块中使用
OrIf
AndIf
,如果像这样,结果可能是未定义的

也可以编写自己的自定义LogicLib运算符:

!include LogicLib.nsh
!macro _MyCheckExitcodeSuccess _a _b _t _f
    !if `${_f}` == ``
        !undef _f
        !define _f +2 
    !endif
    IntCmp ${_b} 1 +2
    IntCmp ${_b} 256 `${_t}` `${_f}` `${_f}`
    !if `${_t}` != ``
        Goto `${_t}`
    !endif
!macroend
!define MyCheckExitcodeSuccess `"" MyCheckExitcodeSuccess`

StrCpy $1 1
StrCpy $2 256
${If} ${MyCheckExitcodeSuccess} $1
${AndIf} ${MyCheckExitcodeSuccess} $2
    MessageBox mb_ok "All OK"
${Else}
    MessageBox mb_ok "Something failed"
${EndIf}

一个稍微苗条一点的方法是

; 1_256_1_256 is defined if we are good
!define $1_256_$2_256
!define $1_256_1_$2
!define 1_$1_1_$2
!define 1_$1_$2_256


!ifdef 1_256_1_256
   message mb_ok "All good"
!else
   message mb_ok "Failure detected"
!endif

为什么不逐个检查返回代码,而不是全部3个?这样你就可以知道哪一个不起作用了。谢谢你的回复。你是对的,第一个控件是$1,这是我发布的代码的一个输入错误。我是nsis脚本新手,是否有关于如何编写自定义LogicLib的教程?是否可以在宏代码中添加注释,解释每行的作用?谢谢。logiclib运算符只是一个以
\uu
开头的宏。如果您有宏:
!宏_Example _p1 _p2 _tf
可以这样使用:
${If}123 Example 456
然后logiclib将执行
!insertmacro _示例123 456 jumpLabelIfTrue JumpLabelifalse
。有时其中一个标签可能是空的,因为这通常意味着继续下一行,这一事实使情况变得复杂。如果宏只需要执行一次IntCmp,那么整个宏体就是
IntCmp${u p1}${u p2}${u t}${u f}${u f}
或者类似的东西。请您解释一下${u t}和${u f}在哪里初始化,以及它们何时收到值。在logiclib.nsh内部。其中哪一个为空取决于您是否使用了if或IfNot和/和if等。。
; 1_256_1_256 is defined if we are good
!define $1_256_$2_256
!define $1_256_1_$2
!define 1_$1_1_$2
!define 1_$1_$2_256


!ifdef 1_256_1_256
   message mb_ok "All good"
!else
   message mb_ok "Failure detected"
!endif