NSIS Выберите файл - PullRequest
       7

NSIS Выберите файл

0 голосов
/ 04 ноября 2011

что я хочу сделать, это иметь страницу, где пользователь просматривает там файловую систему для определенного значения и продолжает работу, если имя файла совпадает. Если быть точным, я бы хотел, чтобы пользователь нашел там исполняемый файл php, а также каталог, который я предполагаю (не уверен, как бы я извлек каталог из полного пути).

Ответы [ 2 ]

8 голосов
/ 05 ноября 2011

Вы можете сделать это с пользовательской страницей:

!include nsDialogs.nsh
!include FileFunc.nsh

Page Custom MyPageCreate MyPageLeave

Var PhpPath

Function MyPageLeave
${NSD_GetText} $PhpPath $0
${GetFileName} $0 $1
${IfNot} ${FileExists} $0
${OrIf} $1 != "php.exe"
    MessageBox mb_iconstop "You must locate php.exe to continue!"
    Abort
${Else}
    #php path is in $0, do something with it...
${EndIf}
FunctionEnd

Function MyPageComDlgSelectPHP
Pop $0
${NSD_GetText} $PhpPath $0
nsDialogs::SelectFileDialog open $0 "php.exe|php.exe"
Pop $0
${If} $0 != ""
    ${NSD_SetText} $PhpPath $0
${EndIf}
FunctionEnd

Function MyPageCreate
nsDialogs::Create 1018
Pop $0

${NSD_CreateText} 0 5u -25u 13u "$ProgramFiles\PHP\php.exe"
Pop $PhpPath

${NSD_CreateBrowseButton} -23u 4u 20u 15u "..."
Pop $0
${NSD_OnClick} $0 MyPageComDlgSelectPHP

nsDialogs::Show
FunctionEnd

или вы можете использовать страницу каталога:

!include LogicLib.nsh

Var PhpPath

Function .onInit
StrCpy $PhpPath "$ProgramFiles\PHP" ; Default (You could probably do better by checking the registry)
FunctionEnd

PageEx Directory
    DirVar $PhpPath
    DirVerify leave
    PageCallbacks "" PhpPageShow PhpPageLeave
    DirText "Select PHP folder" "PHP Folder" "" "Select PHP folder"
PageExEnd

Function PhpPageShow
;Hide space texts
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $1 $0 0x3FF
ShowWindow $1 0
GetDlgItem $1 $0 0x400
ShowWindow $1 0
FunctionEnd

Function PhpPageLeave
GetInstDirError $0
${If} $0 <> 0
${OrIfNot} ${FileExists} "$PhpPath\php.exe"
    MessageBox mb_iconstop "You must locate the php folder to continue!"
    Abort
${EndIf}
FunctionEnd
4 голосов
/ 04 ноября 2011

Этого очень легко добиться с помощью пользовательской страницы nsDialogs и nsDialogs :: SelectFileDialog , предназначенных для этой цели.

...