nsnb
23rd July 2009 19:36 UTC
SetShellVarContext on-the-fly ?
  Can I start a section with
SetShellVarContext current
Then change it later on (in same section) to
SetShellVarContext all
Then change it again to
SetShellVarContext current
?
The goal is to place some shortcuts on the Start Menu of the Administrator only, then place some items on the Start Menu of All Users, then restore ShellVarContext back to current.
I just tried that and it didn't work for me. So either there is an inherent limitation of which I didn't know or I am doing something wrong.
If the latter, any idea what could possibly go wrong in simple code like this?
SetShellVarContext all
CreateShortCut "${D_STARTMENU}\\MyApp.lnk" "myapp.exe"
>SetShellVarContext current 
>
    
      jpderuiter
      23rd July 2009 20:25 UTC
      Did you define D_STARTMENU somewhere?
      That define will not change based on SetShellVarContext.
      Use $SMPROGRAMS instead (See chapter 4.2.3 in the NSIS manual)
     
    
      nsnb
      24th July 2009 15:57 UTC
      
      
        Originally posted by jpderuiter
        Did you define D_STARTMENU somewhere?
      
Yes I did. Thank you for the tip. I changed the above to:
      
SetShellVarContext all 
CreateShortCut "$SMPROGRAMS\${D_COMPANY}\${D_PRODUCT}\\MyApp.lnk" "$PROGRAMFILES\${D_COMPANY}\${D_PRODUCT}\\myapp.exe" 
>SetShellVarContext current 
>
But this still doesn't work.
      
      Interestingly enough, I have no such problem with SetOutPath.
      
      Did changing SetShellVarContext on the fly ever worked for anyone?
      
      Thanks.
    
 
    
      nsnb
      24th July 2009 16:18 UTC
      Update: If I change:
      
CreateShortCut "$SMPROGRAMS\${D_COMPANY}\${D_PRODUCT}\\MyApp.lnk" "$PROGRAMFILES\${D_COMPANY}\${D_PRODUCT}\\myapp.exe" 
To:
      
CreateShortCut "$SMPROGRAMS\\MyApp.lnk" "$PROGRAMFILES\${D_COMPANY}\${D_PRODUCT}\\myapp.exe" 
It works.
      
      Strange. I 
know that ${D_COMPANY} and ${D_PRODUCT} are defined and valid. Why is it behaving like this?
    
 
    
      nsnb
      24th July 2009 16:31 UTC
      Problem solved. :)
      
      What was missing is the CreateDirectory statement before the CreateShortCut:
      
CreateDirectory "$SMPROGRAMS\${D_COMPANY}\${D_PRODUCT}" 
jpderuiter, thank you again for the clue that led to the solution.