Kopejkin, озвученная вами проблема все таки имеет место на системах Windows 8/8.1. Установил на виртуалку второй системой Windows 8.1 64-бит. Запустил инсталлятор и... ярлыка деинсталляции на экране "Приложения" не обнаружил. Начал разбираться и выяснил вот что. Ярлык к файлу деинсталляции исправно создается, но Windows по неясным причинам, примерно через 10-15 секунд по завершении установки, в свойствах ярлыка самовольно меняет рабочий каталог файла деинсталляции. Первоначально там указан верный каталог, как и создал его инсталлятор (С:\Programs Files\...) но по истечении указанного промежутка времени путь волшебным образом меняется на С:\Programs Files
(x86)\... В чем причина такого поведения системы - не знаю. Но побороть это можно установкой для файла ярлыка атрибута "
только для чтения". Тогда Windows ничего не сможет сделать с ярлыком и он будет исправно отображаться на экране "Приложений". Вот сценарий, в котором добавлены соответствующие команды:
читать дальше »
Код:

########## ПРИМЕР ##############
!define PRODUCT_NAME "FolderSizes 7"
!define PRODUCT_VERSION ".0.56"
!define BRANDING "PUPKIN"
SetCompressor /SOLID lzma
!include MUI.nsh
!include x64.nsh ; поддержка 64-бит систем
!include Logiclib.nsh ; расширенная поддержка логики
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
Name "${PRODUCT_NAME}"
Caption "Установка русификатора ${PRODUCT_NAME}${PRODUCT_VERSION}"
UninstallCaption "Удаление русификатора ${PRODUCT_NAME}${PRODUCT_VERSION}"
OutFile "rus.${PRODUCT_NAME}${PRODUCT_VERSION}.exe"
InstallDir "$PROGRAMFILES\Key Metric Software\${PRODUCT_NAME}\"
RequestExecutionLevel admin
ShowInstDetails show
ShowUninstDetails show
BrandingText "${BRANDING}"
Function .onInit
${If} ${RunningX64}
SetRegView 64
StrCpy $INSTDIR "$PROGRAMFILES64\Key Metric Software\${PRODUCT_NAME}\"
${Else}
MessageBox MB_OK|MB_ICONSTOP "Только для х64!" IDOK
Quit
${EndIf}
FunctionEnd
Function un.onInit
${If} ${RunningX64}
SetRegView 64
${EndIf}
FunctionEnd
Section "-MainSection"
SetOutPath "$INSTDIR"
File /r "1.txt"
WriteUninstaller "$INSTDIR\unrus.exe"
; блок Установка/Удаление программм
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "DisplayName" "${PRODUCT_NAME}${PRODUCT_VERSION}. Удалить русификатор"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "UninstallString" "$INSTDIR\unrus.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "DisplayVersion" "1.0"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "Publisher" "© Pupkin, 03/2014"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "DisplayIcon" "$INSTDIR\unrus.exe"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "NoModify" 0x00000001
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus" "NoRepair" 0x00000001
SetShellVarContext all
; Ярлыки в меню Пуск - Программы
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
; в Win8 этот ярлык виден в ПРИЛОЖЕНИЯХ в ЛЮБОМ случае
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Открыть 1.txt.lnk" "$INSTDIR\1.txt"
; в Win8 этот ярлык виден в ПРИЛОЖЕНИЯХ только при "ОТКЛЮЧЕНИИ" блока "Установка/Удаление"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить русификатор ${PRODUCT_NAME}.lnk" "$INSTDIR\unrus.exe"
; Устанавливаем для ярлыка атрибут "только для чтения"
SetFileAttributes "$SMPROGRAMS\${PRODUCT_NAME}\Удалить русификатор ${PRODUCT_NAME}.lnk" READONLY
SetAutoClose false
SectionEnd
Section Uninstall
Delete "$INSTDIR\1.txt"
; Снимаем с файла ярлыка атрибут "только для чтения", чтобы его можно было удалить
SetFileAttributes "$SMPROGRAMS\${PRODUCT_NAME}\Удалить русификатор ${PRODUCT_NAME}.lnk" NORMAL
SetShellVarContext all
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Открыть 1.txt.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Удалить русификатор ${PRODUCT_NAME}.lnk"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus"
delete "$INSTDIR\unrus.exe"
SetAutoClose false
SectionEnd