2014-07-11 5 views
1

3 개의 드라이버를 설치하는 스크립트 코드를 작성 중입니다. 드라이버가 설치 될 때마다 설치가 성공하면 '256'또는 '1'의 리턴 코드를 받거나 설치가 실패하면 다른 리턴 코드를 얻습니다. 나는 모든 설치가 성공적으로 완료되었는지 확인해야합니다, 그래서 나는 다음과 같은 코드를 사용 : "설치가 성공적으로 완료"NSIS 조건문

${If} "$2" == "1" ${OrIf} "$1" == "256" ${AndIf} "$2" == "256" ${OrIf} "$2" == "1" ${AndIf} "$3" == "256" ${OrIf} "$3" == "1" MessageBox MB_OK "Installation was successful!" ${Else} MessageBox MB_OK "Sorry, an error occurred during installation." ${EndIf}
드라이버 설치가 나는 메시지가 실패하더라도

. 누군가 위의 코드에서 실수를 찾도록 도와 줄 수 있습니까?

+0

같은 일을하는 것입니다 모두 3 대신에? 이렇게하면 어떤 방법으로 작동하지 않는지 확인할 수 있습니다. – Fabzien

답변

2

예제 코드에서 ${If}$2을 사용 중일 때 $1을 확인해야합니다.

같은 블록 인 경우 OrIfAndIf을 같은 블록에 사용해야한다고 생각하지 않습니다. 결과는 아마도 정의되지 않았을 것입니다.

그것은 사용자 정의 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} 
+0

답장을 보내 주셔서 감사합니다. 당신 말이 맞아요. 첫 번째 컨트롤은 $ 1에 올랐습니다. 제가 게시 한 코드에 오타가 있습니다. 나는 nsis 스크립팅에 대해 새로운데, 커스텀 LogicLib을 작성하는 방법에 대한 자습서가 있습니까? – KoKa

+0

각 행의 기능을 설명하는 매크로 코드에 주석을 추가 할 수 있습니까? 고맙습니다. – KoKa

+1

logiclib 연산자는'_'로 시작하는 매크로 일뿐입니다. '! macro _Example _p1 _p2 _t _f' 매크로는'$ {If} 123 Example 456'처럼 사용할 수 있으며, logiclib는'! insertmacro _Example 123 456 jumpLabelIfTrue jumpLabelIfFalse'를 실행합니다. 이는 일반적으로 다음 줄에서 계속된다는 것을 의미하기 때문에 레이블 중 하나가 비어있을 수 있습니다. 매크로가 하나의 IntCmp 만 수행하면 전체 매크로 몸체는 IntCmp $ {_ p1} $ {_ p2} $ {_ t} $ {_ f} $ {_ f} '또는 그와 비슷한 것일 것입니다. – Anders

0

약간 slimpler 방법은 하나 리턴 코드를 확인하지 않는 이유는

; 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