문제

편집하다:현재 내가 포함하고 있는 모든 헤더는 다음과 같습니다. MUI.nsh.내 생각에는 스크립트의 다른 부분에 LogicLib.nsh와 Section.nsh를 포함시키는 옵션이 배제되어야 한다고 생각합니다.

그리고 아래에 게시한 스크립트가 있음에도 불구하고 코드는 여전히 컴파일됩니다.

좋아, 다음과 같은 NSIS 스크립트 부분을 호출했습니다. !include MUI2.nsh 네임스페이스.실제로 어떤 네임스페이스를 사용해야 하는지 좀 더 명확하게 알고 싶습니다. !include 내 코드에서.내 혼란은 다음과 같습니다.

1) 다음과 같은 코드가 있습니다.

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
Page custom DbPage "" ": Information Page"
Page instfiles
!insertmacro MUI_PAGE_FINISH

이는 기본적으로 사용자 정의 InstallOptions 페이지도 사용하고 있음을 의미합니다.그래서 나는 포함해야한다고 생각했습니다 !include InstallOptions.nsh 그리고 !include MUI.nsh.효과가있다.하지만 놀랍게도 내가 포함하지 않더라도 !include InstallOptions.nsh 코드가 컴파일되고 최종 결과에는 차이가 없습니다 !!하지만 내가 포함한다면 !include MUI2.nsh, 코드가 컴파일되지 않습니다.하지만 다음을 포함하면 정상적으로 컴파일되고 작동합니다. !include MUI2.nsh & !include InstallOptions.nsh. 그럼 무엇을 포함해야 할까요? !include MUI.nsh 단독으로 또는 콤보로 !include MUI2.nsh & !include InstallOptions.nsh ?? .모두 포함하면 코드가 컴파일됩니다. !include MUI2.nsh, !include InstallOptions.nsh 그리고 !include MUI.nsh. 이 경우 매크로와 함수는 다음에서 로드됩니다. !include MUI2.nsh 또는 !include MUI.nsh ??

2) 나는 여기에 정의된 함수 섹션이 선택되었는지 여부를 확인하려면 다음을 수행하세요.

SectionGetFlags ${Section_Name} $R0 
IntOp $R0 $R0 & ${SF_SELECTED} 
IntCmp $R0 ${SF_SELECTED} show 

링크는 포함을 요청합니다 !include Sections.nsh, 그러나 나에게는 그것을 포함하지 않고도 스크립트가 컴파일됩니다. 왜 그럴까요??이상적으로 해야 하나? !include 그것?

3) 다음과 같은 코드가 있습니다.

${If} ${FileExists} `$0\*.*`
${Else}
    CreateDirectory $0
${EndIf}

그리고

  ${If} $2 != <
    StrCpy $2 >
  ${EndIf}

  ${If} $3 != <
    StrCpy $3 >
  ${EndIf}

등. 그럼 나는 안되는가? !include LogicLib ? 사용하지 않고도 코드가 컴파일됩니다. !include LogicLib.

적절한 패키지/참조를 포함하지 않고 NSIS 스크립트를 컴파일할 수 있는 이유는 무엇입니까?

업데이트: 나는 여기에 대답하세요 nullsoft 공식 포럼에도 같은 질문이 있습니다.그것은 같은 이야기를합니다.

도움이 되었습니까?

해결책

NSIS에는 네임스페이스가 없습니다. 네임스페이스. !include'ed 파일은 코드에 직접 "붙여넣어집니다"(!include 줄이 있는 지점).

1)

MUI2는 사용자 정의 페이지에 nsDialogs를 사용하고 MUI(v1)는 InstallOptions를 사용합니다.

만약에 InstallOptions.nsh에 매크로가 필요합니다. 당신의 그런 다음 코드 그것을 포함해야합니다.MUI에 필요한 경우 아무 작업도 수행하지 않고도 포함됩니다.

당신은해야 ~ 아니다 MUI2.nsh와 MUI.nsh를 모두 포함하려면 둘 중 하나를 선택해야 합니다!

2) 그리고 3)

다른 코드에는 이미 Sections.nsh/LogicLib.nsh가 포함되어 있습니다.다시 포함해도 문제가 없으며 그렇게 하는 것이 좋습니다(포함하도록 제어할 수 없는 코드에 의존하지 않도록).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top