What was $SMPROGRAMS set to then? I thought you said it was pointing to the wrong start menu.
I checked it using the FileWrite method Balderstrom linked to. Had it write down what was being stored in the variable(s) in a logging text file. The problem was when the variable $SMPROGRAMS was called outside the section, it didn't include the Folder the user selected. So if I asked $SMPROGRAMS what it was inside the Start Menu section it would return:
C:\Documents and Settings\P\Start Menu\Programs\Firaxis Games (because I picked Firaxis Games as the menu folder to be in)
When I asked it what it was outside the section it would tell me it was:
C:\Documents and Settings\P\Start Menu\Programs
So I had to end up writing the Start Menu to the registry inside that section, because NSIS wol't let me set a variable inside the install sections, and then call for it in the uninstall sections. First I tried creating a new variable StartMenuFolder1, set it in the StartMenu section, and from then on in the installer section if I asked it what it was it would return the correct path, but if I put it in the uninstall section it just returned blank (the logger wrote nothing).
I don't see how you would optimize that code any. Is there anything in particular you find slow?
I was more worried about the Registry stuff. I'm no programmer and tinkering with other users registries worries me

, but if you say it looks clean, sounds good to me.
You might be able to set a pre-function that is called before the page is shown. If that section is unselected, call Abort to skip the page.
That would work yes. Any idea how to do this?
What I was just trying to do was set it so that the Start Menu Shortcut box was locked in (always checked), like the Main install is. I know it's here where it's controlled:
Code:
Function myOnGUIInit
SectionGetFlags ${Section1} $0
IntOp $R0 $0 | ${SF_SELECTED}
SectionSetFlags ${Section1} $R0
FunctionEnd
And possibly here:
Code:
Function onInitDirectoryPage1
StrCpy $CurrentPage "DirectoryPage1"
;Section 1 selected?
SectionGetFlags ${Section1} $0
IntOp $R0 $0 & ${SF_SELECTED}
IntCmp $R0 ${SF_SELECTED} checkRegEntry
But I can't figure out how to make Section4 also locked into being selected. I've been reading the tutorials, and searching around the NSIS stuff, but I can't find an example of multiple options being locked in. Only single sections, which I already have.
Either system, setting it up so that the page doesn't load to select the Start Menu folder, or Locking the Start Menu option at the beggining would both work (you can unselect the start menu shortcut in that screen anyway). Any advice/code examples would be much apreciated.