[sword-devel] BibleCS Installer: readme before executables

DM Smith dmsmith555 at yahoo.com
Fri Feb 10 05:56:02 MST 2006


Well, I think you have two very good solutions here: (C and D)
1) Swap the labels and the functions. I found the default labels and I 
think that we can use them, so i18n is not an issue, nor is hacking.
2) Set variables in both functions and in .onInstSuccess do the work as 
requested.
The second seems cleaner.

L.Allan-pbio wrote:
>> By having them, we sign up to the responsibility for 
>> internationalizing those pages, should the need arise.
>
> Good point ... I hadn't considered that.
>
> Regarding getting readme.txt to show up by itself before 
> InstallManager.exe and sword.exe (split from general Installer thread 
> to be focused on this issue alone) :
>
> I did some more experimenting with MUI_FINISHPAGE and have several 
> different approaches (A, B, C, and D) for you to consider.
>
> A: Have just the "Run" function available, and it inflexibly shows the 
> readme, then invokes InstallManager, then invokes sword.exe
>
> B: Have just the "Run" function, and it inflexibly shows the readme, 
> then invokes the InstallManager. There is a .onInstSuccess function 
> that always invokes sword.exe. The .onInstSuccess turns out to run 
> after the FINISH functions, so use ExecWait for the FINISH functions.
>
> C: Have the Run function simple set a RunExecutableFlag variable. The 
> readme function would use:
> ExecWait 'notepad $INSTDIR\readme.txt'
> Then then .onInstSuccess function would check the RunExecutableFlag 
> variable and proceed accordingly.
> (See Option C code below)
>
> D: It turns out that the FinishPage Run function actually runs first 
> before the Readme function. (This would be the norm with the readme 
> being the last thing shown.) It appears that they show up together, 
> because I suppose they are invoked with the equivalent of Exec-No-Wait
>
> It isn't pretty, but you can "swap" the run function and readme 
> function, and have the readme shown before the InstallManager+sword by 
> using:
> ExecWait 'notepad $INSTDIR\readme.txt' (see source code below)
>
> Below Option C code is Option D sample code, with MessageBox stubs for 
> InstallManager.exe and sword.exe. The noteworthy features are 
> SwappedReadmeFunction and SwappedRunFunction.
>
> ;******* Option C ***************************
> !include "MUI.nsh"
> Name "Modern UI Test"
> OutFile "MuiFinishPageRunFunction_D.exe"
> InstallDir "$PROGRAMFILES\Modern UI Test"
> InstallDirRegKey HKCU "Software\Modern UI Test" ""
>
> ShowInstDetails show
> ;--------------------------------
> ;Pages
> !insertmacro MUI_PAGE_INSTFILES
>
>  !define MUI_FINISHPAGE_RUN_TEXT  "Run InstallManager and then sword.exe"
>  !define MUI_FINISHPAGE_RUN
>  !define MUI_FINISHPAGE_RUN_FUNCTION SetRunExecutableFlag
>  !define MUI_FINISHPAGE_SHOWREADME_TEXT "Show InstallManager info"
>  !define MUI_FINISHPAGE_SHOWREADME
>  !define MUI_FINISHPAGE_SHOWREADME_FUNCTION ShowInstallManagerInfo
> !insertmacro MUI_PAGE_FINISH
>
> ;Languages
> !insertmacro MUI_LANGUAGE "English"
>
> Var RunExecutablesFlag
>
> ;--------------------------------
> # No components page, so this is anonymous
> Section "Dummy Section" SecDummy
>  SetOutPath "$INSTDIR"
>  File readme.txt
>  WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR
>  WriteUninstaller "$INSTDIR\Uninstall.exe"
>  DetailPrint "Reached Dummy section"
> SectionEnd
>
> Section "Uninstall"
>  Delete "$INSTDIR\Uninstall.exe"
>  RMDir "$INSTDIR"
>  DeleteRegKey /ifempty HKCU "Software\Modern UI Test"
> SectionEnd
>
> Function .onInit
>  StrCpy $RunExecutablesFlag 0
> FunctionEnd
>
> Function SetRunExecutableFlag
>  StrCpy $RunExecutablesFlag 1
> FunctionEnd
>
> Function ShowInstallManagerInfo
>  ExecWait 'notepad $INSTDIR\readme.txt'
> FunctionEnd
>
> Function .onInstSuccess
>  StrCmp $RunExecutablesFlag 1 0 PastRunningExecutables
>    MessageBox MB_OK 'InstallManager would run here as ExecWait'
>    MessageBox MB_OK 'sword.exe would run here as Exec after 
> InstallManager'
>  PastRunningExecutables:
> FunctionEnd
> ;******* Option C ***************************
>
> ;******* Option D ***************************
> !include "MUI.nsh"
> Name "Modern UI Test"
> OutFile "MuiFinishPageRunFunction.exe"
> InstallDir "$PROGRAMFILES\Modern UI Test"
> InstallDirRegKey HKCU "Software\Modern UI Test" ""
>
> ShowInstDetails show
> ;--------------------------------
> ;Pages
> !insertmacro MUI_PAGE_INSTFILES
>
>  !define MUI_FINISHPAGE_RUN_TEXT "Show InstallManager information"
>  !define MUI_FINISHPAGE_RUN
>  !define MUI_FINISHPAGE_RUN_FUNCTION SwappedReadmeFunction
>  !define MUI_FINISHPAGE_SHOWREADME_TEXT "Run InstallManager and then 
> sword.exe"
>  !define MUI_FINISHPAGE_SHOWREADME
>  !define MUI_FINISHPAGE_SHOWREADME_FUNCTION SwappedRunFunction
> !insertmacro MUI_PAGE_FINISH
>
> ;Languages
> !insertmacro MUI_LANGUAGE "English"
>
> ;--------------------------------
> # No components page, so this is anonymous
> Section "Dummy Section" SecDummy
>  SetOutPath "$INSTDIR"
>  File readme.txt
>  WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR
>  WriteUninstaller "$INSTDIR\Uninstall.exe"
>  DetailPrint "Reached Dummy section"
> SectionEnd
>
> Section "Uninstall"
>  Delete "$INSTDIR\Uninstall.exe"
>  RMDir "$INSTDIR"
>  DeleteRegKey /ifempty HKCU "Software\Modern UI Test"
> SectionEnd
>
> Function SwappedReadmeFunction
>  ExecWait 'notepad $INSTDIR\readme.txt'
> FunctionEnd
>
> Function SwappedRunFunction
>  MessageBox MB_OK 'InstallManager would run here as ExecWait'
>  MessageBox MB_OK 'sword.exe would run here as Exec after InstallManager'
> FunctionEnd
> ;******* Option D ***************************
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
>



More information about the sword-devel mailing list