Regarding use of HKCU vs HKLM (split from general Installer thread to be focused on this issue alone) :

Here is some sample code for a custom page allowing choice of "Just this user" and "All Users". It is pretty stripped down just to illustrate the basics of how it works.

(I haven't tested with a "limited user" account to see what happens. I suppose that could be detected with Contrib\UserInfo\UserInfo.nsi and only allow "current" and don't even show the custom page ... my impression is that a "limited user" can still read HKLM)

;*************** ini file ************
# HkcuVsHklm_CustomPage.ini

[Settings]
NumFields=2

[Field 1]
Type=RadioButton
Text=Install for just this user
Flags=NOTIFY|GROUP
State=1
Left=0
Right=-10
Top=0
Bottom=12

[Field 2]
Type=RadioButton
Text=Install for all users on this computer
Flags=NOTIFY|NOTABSTOP
State=0
Left=0
Right=-10
Top=20
Bottom=32

********** Installer ***************
!include Sections.nsh
!include "MUI.nsh"

Var HkeyChoice

Page custom PreShowInstallChoices LeaveInstallChoices ": Just this user or all users"

!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE English

;--------------------------------
; Installer attributes
Name "Modern UI Test"
OutFile HkcuVsHklm.exe
InstallDir "$PROGRAMFILES\Modern UI Test"
InstallDirRegKey HKCU "Software\Modern UI Test" ""

LangString TEXT_IO_TITLE ${LANG_ENGLISH} "CrossWire family of applications."
LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "Explanation about choosing 'Just this User' vs 'All Users' goes here."

Function .onInit
 DeleteRegValue HKLM "SOFTWARE\CrossWire\The SWORD Project" "HkcuVsHklm"
 DeleteRegValue HKCU "SOFTWARE\CrossWire\The SWORD Project" "HkcuVsHklm"
 StrCpy $HkeyChoice "current"
 !insertmacro MUI_INSTALLOPTIONS_EXTRACT "HkcuVsHklm_CustomPage.ini"
FunctionEnd

# Installer sections
Section -Main WriteFiles
SectionEnd

Section -post WriteRegistryEntries
WriteRegStr SHCTX "SOFTWARE\CrossWire\The SWORD Project" "HkcuVsHklm" "$HkeyChoice"
SectionEnd

Function PreShowInstallChoices
 !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
 !insertmacro MUI_INSTALLOPTIONS_DISPLAY "HkcuVsHklm_CustomPage.ini"
FunctionEnd

Function LeaveInstallChoices
; At this point the user has either pressed the Next Button or one of our custom RadioButtons
 ; We find out which by reading the "Settings" field from the INI file
!insertmacro MUI_INSTALLOPTIONS_READ $0 "HkcuVsHklm_CustomPage.ini" "Settings" "State"
 StrCmp $0 0  NextButtonPicked
 StrCmp $0 1  JustThisUser
 StrCmp $0 2  AllUsers
 Abort ; Return to the page to allow further choices

JustThisUser:
 StrCpy $HkeyChoice "current"
 Abort ; Return to the page

AllUsers:
 StrCpy $HkeyChoice "all"
 Abort ; Return to the page

NextButtonPicked:
 StrCmp $HkeyChoice "current" 0 UseAll
   SetShellVarContext current
   GoTo ChoiceDone

   UseAll:
   SetShellVarContext all

 ChoiceDone:
FunctionEnd

Function .onInstSuccess
 ReadRegStr $0 SHCTX "SOFTWARE\CrossWire\The SWORD Project" "HkcuVsHklm"
 MessageBox MB_OK "Hkey Choice: $0"
FunctionEnd

_______________________________________________
sword-devel mailing list: [email protected]
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page

Reply via email to