kotkovets, попробЫвал эксперементировать с получением переменных, вроде все получилось только, переменная обьявленная как глобальная почему-то ее значение невидится в секции удаления и приходится их дублировать:
Код:

...
;функция в которой определяется переменная пути установки
Function .onInit
Var /Global deliconAll
SetShellVarContext all
StrCpy $deliconAll "$SMPROGRAMS"
FunctionEnd
Section "MainSection" SEC01
...
;в этой секции значение переменной работает
CreateDirectory "$deliconAll\Total Commander"
CreateShortCut "$deliconAll\Total Commander\Total Commander.lnk" "$INSTDIR\Totalcmd.exe"
...
SectionEnd
Section -AdditionalIcons
;в этой секции значение переменной тоже работает
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$deliconAll\Total Commander\Web-сайт программы.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$deliconAll\Total Commander\Удалить программу.lnk" "$INSTDIR\uninst.exe"
SectionEnd
...
Section Uninstall
...
;в этой секции переменная существует, но значение уже неизвестно, и приходится повторять код
SetShellVarContext all
StrCpy $deliconAll "$SMPROGRAMS"
Delete "$deliconAll\Total Commander\Удалить программу.lnk"
Delete "$deliconAll\Total Commander\Web-сайт программы.lnk"
Delete "$deliconAll\Total Commander\Total Commander.lnk"
RMDir "$deliconAll\Total Commander"
;опять же приходится дублировать код удаления ярлыков из другово места т.к. ставиться это на Windows7x64
SetShellVarContext current
StrCpy $deliconAll "$SMPROGRAMS"
Delete "$deliconAll\Total Commander\Удалить программу.lnk"
Delete "$deliconAll\Total Commander\Web-сайт программы.lnk"
Delete "$deliconAll\Total Commander\Total Commander.lnk"
RMDir "$deliconAll\Total Commander"
...
SectionEnd
...
Подскажите пожалуйста, почему переменная в секции удаления теряет свое значения, и как избавиться от дублирования кода в этой секции?