Anders - 2016-01-14

Forcing someone to accept a license makes silent installers rather pointless IMHO but you can do it with NSIS but it is not pretty:

Var SilentType
!define ST_PROGRESS 1
!define ST_LICENSE 2

!include FileFunc.nsh
!include LogicLib.nsh
Function .onInit
${GetParameters} $0
ClearErrors
${GetOptions} $0 "/LICENSE" $1
${IfNot} ${Errors}
    IntOp $SilentType $SilentType | ${ST_LICENSE}
    SetSilent normal
${EndIf}
ClearErrors
${GetOptions} $0 "/PROGRESS" $1
${IfNot} ${Errors}
    IntOp $SilentType $SilentType | ${ST_PROGRESS}
    SetSilent normal
${EndIf}
FunctionEnd

LicenseData "${__FILE__}"
Page License PageSkipLicense "" PageLeaveLicense
Page Directory PageSkipOther
Page InstFiles "" PageShowInst PageLeaveInst

Function PageSkipLicense
IntOp $0 $SilentType & ${ST_LICENSE}
${IfThen} $0 = 0 ${|} Abort ${|}
FunctionEnd
Function PageLeaveLicense
IntOp $0 ${ST_LICENSE} ~
IntOp $0 $SilentType & $0
${If} $0 = 0 
    SetSilent silent
    HideWindow
${EndIf}
FunctionEnd

Function PageSkipOther
${IfThen} $SilentType <> 0 ${|} Abort ${|}
FunctionEnd

Function PageShowInst
IntOp $0 $SilentType & ${ST_PROGRESS}
${If} $0 <> 0 
    SetDetailsView hide
    FindWindow $0 "#32770" "" $HWNDPARENT
    GetDlgItem $0 $0 0x403
    ShowWindow $0 0
    System::Call '*(i,i,i,i)i.r1'
    System::Call 'USER32::GetWindowRect(i$0,i$1)'
    System::Call 'USER32::MapWindowPoints(i0,i$HWNDPARENT,i$1,i2)'
    System::Call '*$1(i,i,i,i.r2)'
    System::Call 'USER32::GetWindowRect(i$HWNDPARENT,i$1)'
    System::Call '*$1(i.r3,i,i.r4,i)'
    System::Free $1
    IntOp $4 $4 - $3
    System::Call 'USER32::SetWindowPos(i$HWNDPARENT,i0,i0,i0,i$4,i$2,i0x16)'
${EndIf}
FunctionEnd
Function PageLeaveInst
${If} $SilentType <> 0
    SetSilent silent
    HideWindow
${EndIf}
FunctionEnd

Section
Sleep 555
Sleep 555
Sleep 555
SectionEnd