Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Flix

Пользователь


Сообщения: 94
Благодарности: 54

Профиль | Отправить PM | Цитировать


Kopejkin, вы в своем сценарии не учли особенности систем 64-бит. Помимо раздельных каталогов для установки 32-бит и 64-бит приложений ("Program Files (x86)" и "Program Files" соответственно), 64-бит версии Windows поддерживают два разных представления реестра - 32-бит и 64-бит (для 32-бит приложений работает WOW64). Короче, в своем сценарии, установку деинсталлятора вы осуществляете в каталог для 64-бит приложений, а запись о деинсталляции выполняете в 32-бит ветку реестра. В итоге ярлык деинсталляции получается битый и Windows разумно полагает, что ему не место на экране Приложений, и не показывает его. По умолчанию NSIS создает инсталлятор для установки 32-бит приложений. Если требуется установка приложения с учетом 64-бит архитектуры, то в сценарии нужно предусмотреть эти моменты и дать соответствующие команды. В данном случае, при записи в реестр, нужно установить доступ к 64-бит ветке реестра. Делается это командой SetRegView (почитайте про неё в справке NSIS).

Поэтому, перед командами записи данных в реестр, укажите команду SetRegView 64. Аналогично и для секции деинсталляции, чтобы корректно удалить записанные ключи.
читать дальше »
Код: Выделить весь код
########## ПРИМЕР ##############

!define PRODUCT_NAME "FolderSizes 7"
!define PRODUCT_VERSION ".0.56"
!define BRANDING "PUPKIN"

!include "MUI.nsh"

SetCompressor /SOLID lzma

!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}_with_reg.exe"

; Установка в каталог для 64-бит приложений!
InstallDir "$PROGRAMFILES64\Key Metric Software\${PRODUCT_NAME}"

RequestExecutionLevel admin
ShowInstDetails show
ShowUninstDetails show
BrandingText "${BRANDING}"

Section "-MainSection"
  SetOutPath "$INSTDIR"
  File /r "1.txt"
  WriteUninstaller "$INSTDIR\unrus.exe"

  ; Устанавливаем доступ к 64-бит ветке реестра
  SetRegView 64

  ; блок Установка/Удаление программм
  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"

  SetAutoClose false
SectionEnd

Section Uninstall
  Delete "$INSTDIR\1.txt"
  SetShellVarContext all
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\Открыть 1.txt.lnk"
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\Удалить русификатор ${PRODUCT_NAME}.lnk"

  ; Устанавливаем доступ к 64-бит ветке реестра
  SetRegView 64

  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus"
  Delete "$INSTDIR\unrus.exe"
  SetAutoClose false
SectionEnd

Еще подумайте, что произойдет, если пользователь запустит ваш инсталлятор на 32-бит системе. Полагаю, что необходимо выполнять проверку битности и соответственно ей выполнять те или иные команды установки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:00, 24-03-2014 | #1093