Когда я нажимаю & ldquo; Готово & rdquo; кнопка или кнопка закрытия в верхнем правом углу пользовательской страницы, страница не закрывается с помощью NSIS

Вам нужно указать строку даты как дату xs: date, чтобы иметь возможность сравнивать их таким образом. Форматирование с использованием fn:format-date() просто создает строку, а fn:current-date() возвращает xs: date. Этот фрагмент выполняет то, что вы хотите, но вы можете также рассмотреть сохраняющиеся данные в своем документе в формате xs: date, то есть <date>2016-12-31</date>.

let $doc := 
    <root>
        <date>12/31/2016</date>
    </root>
let $date-string := $doc/date/text()
let $date-parts := fn:tokenize($date-string,"/")

(: rearrange date parts into yyyy-mm-dd string and cast as xs:date :)
let $date := xs:date(fn:concat($date-parts[3],"-",$date-parts[1],"-",$date-parts[2]))

let $today := fn:current-date()

return $date le $today

=> false

Если дата сохраняется в формате xs: date, ее можно упростить следующим образом:

let $doc := 
    <root>
        <date>2016-12-31</date>
    </root>

return xs:date($doc/date/text()) le fn:current-date() 

Затем вы также можете использовать индекс диапазона на дату элемент, чтобы использовать cts:element-range-query() для выбора документов, соответствующих вашим критериям и т. д., когда дата сохраняется таким образом.

-1
задан bhavya 20 January 2019 в 13:07
поделиться

1 ответ

MessageBox, который вы видите, исходит из вашего собственного кода в вашей функции onAbort!

Тот факт, что вы делаете

!define MUI_PAGE_CUSTOMFUNCTION_SHOW AbruptShow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE AbruptLeave

, показывает, что вы не понять, как работают пользовательские страницы.

Чтобы ваша специальная страница прерывания завершилась без дальнейших действий, вам просто ничего не нужно делать в функции onAbort, когда вы находитесь на этой странице:

Var PageId
var IsOnAbruptPage
!define MUI_CUSTOMFUNCTION_ABORT onAbort
!include "MUI2.nsh"
!include LogicLib.nsh
Name "MyApp"

#OutFile "MyApp.exe"
InstallDir "$temp\MyApp"
#RequestExecutionLevel admin
OutFile Test.exe
RequestExecutionLevel user


;--------------------------------
Page Custom MyInfoPage
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelShow
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyLicenseShowCallback
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyDirectoryShowCallback
!insertmacro MUI_PAGE_DIRECTORY
Page Custom MyAbruptPage 
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------
!insertmacro MUI_LANGUAGE "English" 

Function MyDirectoryShowCallback
StrCpy $PageId 3
GetDlgItem [111] $hwndparent 1 ; 
SendMessage [111] ${WM_SETTEXT} 0 `STR:$(^NextBtn)`
FunctionEnd

Function MyLicenseShowCallback
StrCpy $PageId 2
FunctionEnd

Function WelShow
StrCpy $PageId 1
GetDlgItem [111] $HWNDPARENT 3
ShowWindow [111] 0 
FunctionEnd


Function MyInfoPage
${IfThen} $PageId == "" ${|} Abort ${|}
StrCpy $PageId 0
GetDlgItem [111] $HWNDPARENT 1
ShowWindow [111] 0 
GetDlgItem [111] $HWNDPARENT 2
${NSD_SetText} [111] "Finish"
nsDialogs::Create 1044
Pop [111]
${NSD_CreateLabel} 120u 10u 195u 28u "Setup Wizard was interrupted"
Pop [111]
nsDialogs::Show
FunctionEnd

Function onAbort
${If} $IsOnAbruptPage <> 0 ; If on aborted page
    Return                 ; allow simple exit
${EndIf}
${If} $PageId <> 0
    ${If} ${Cmd} ` MessageBox MB_YESNO "Are you sure you want to CANCEL" IDYES `
        SendMessage $HWNDPARENT 0x408 -$PageId ""
    ${EndIf}
    Abort
${EndIf}
FunctionEnd

Function GoToAbruptPage
StrCpy $IsOnAbruptPage 1
SendMessage $HWNDPARENT 0x408 -1 ""
Abort
FunctionEnd

Function MyAbruptPage
${IfThen} $IsOnAbruptPage == "" ${|} Abort ${|}
GetDlgItem [111] $HWNDPARENT 1
ShowWindow [111] 0 
GetDlgItem [111] $HWNDPARENT 3
ShowWindow [111] 0 
GetDlgItem [111] $HWNDPARENT 2
${NSD_SetText} [111] "Finish"
nsDialogs::Create 1044
Pop [111]
${NSD_CreateLabel} 120u 10u 195u 20u "Setup Wizard ended prematurely"
Pop [111]
${NSD_CreateLabel} 120u 120u 195u 20u "Setup Wizard ended prematurely"
Pop [111]
nsDialogs::Show
FunctionEnd

;--------------------------------
Section "$(^Name) (required)"
SectionIn RO
SetOutPath $INSTDIR

MessageBox MB_OK|MB_ICONEXCLAMATION "There is an installation failure. Aborting the installation process" IDOK
Call GoToAbruptPage
SectionEnd
0
ответ дан Anders 20 January 2019 в 13:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: