.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 36
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата Kopejkin:



поделитесь этим тестовым сценарием
.: NSIS - все вопросы :. часть 2.




Kopejkin, да делиться нечем. Загляните в папку "Examples" по месту установки NSIS. В частности, при тестировании я использовал сценарий WelcomeFinish.nsi из папки "Modern UI". Я только добавил команды создания ярлыков в секцию "Dummy Section":



CreateDirectory "$SMPROGRAMS\МОЯ ПРОГРАММА"

CreateShortCut "$SMPROGRAMS\МОЯ ПРОГРАММА\УДАЛИТЬ_ТЕСТ.lnk" "$INSTDIR\Uninstall.exe"



И в секцию "Uninstall" их удаление



Delete "$SMPROGRAMS\МОЯ ПРОГРАММА\УДАЛИТЬ_ТЕСТ.lnk"

RMDir "$SMPROGRAMS\МОЯ ПРОГРАММА"



Потом сделал копию файла WelcomeFinish.nsi, переименовал его в WelcomeFinish_rus.nsi (имитация русификатора) и соответственно изменил в нём название файла деинсталляции (Uninstall_rus.exe) и имя ярлыка (УДАЛИТЬ_RUS.lnk). На этом все.
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Добиться отображения ярлыков и в Приложениях и в Установке/Удалении на Win8 мне не удается.

Отключаю блок Установка/Удаление - ярлык "Удалить русификатор..." отображается в Приложениях.

Включаю - ярлык "Удалить русификатор..." в папке с ярлыками программы присутствует, а Приложениях - не отображается.

Может я что-то упускаю, подскажите, пожалуйста.



Тренируюсь на этом сценарии:





Код:

Код: Выделить всё

########## ПРИМЕР ##############
!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}.exe"
InstallDir "$PROGRAMFILES64\Key Metric Software\${PRODUCT_NAME}"
RequestExecutionLevel admin
ShowInstDetails show
ShowUninstDetails show
BrandingText "${BRANDING}"
Section "-MainSection"
  SetOutPath "$INSTDIR"
  File /r "D:\Example1\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"
  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"
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}rus"
  delete "$INSTDIR\unrus.exe"
  SetAutoClose false
SectionEnd
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

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-бит системе. Полагаю, что необходимо выполнять проверку битности и соответственно ей выполнять те или иные команды установки.
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Flix, спасибо за ответ, но так... тоже не работает.

Если устанавливать в C:\Program Files (x86), все происходит точно также: ярлык деинсталлятора отображается в Приложениях только после "скрытия" блока Установки/Удаления. Изображение



Цитата Flix:

Еще подумайте..
.: NSIS - все вопросы :. часть 2.


Как раз с этим проблем не было. K.A.V. подсказочку подарил, правда по другому поводу...



Код:

Код: Выделить всё

Function .OnInit
var /global IsWow64Process       
             System::Call kernel32::GetCurrentProcess()i.s
             System::Call kernel32::IsWow64Process(is,*i.s)
             Pop $IsWow64Process
             StrCmp $IsWow64Process "1" +3 0
   MessageBox MB_OK|MB_ICONSTOP "Только для х64!" IDOK
Quit
FunctionEnd
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Проигрывание WAV-файлов





Код:

Код: Выделить всё

!define SND_ASYNC 1
!define SND_FILENAME 0x20000
!define SND_LOOP 8
; Проигрываем с ожиданием завершения 
  System::Call 'Winmm::PlaySound(t"$EXEDIR\sound.wav", i0, i${SND_FILENAME})'
; Проигрываем без ожидания завершения 
  System::Call 'Winmm::PlaySound(t"$EXEDIR\sound.wav", i0, i${SND_FILENAME}|${SND_ASYNC})'
; Проигрываем без ожидания завершения + с зацикливанием
  System::Call 'Winmm::PlaySound(t"$EXEDIR\sound.wav", i0, i${SND_FILENAME}|${SND_ASYNC}|${SND_LOOP})'

Может, кому пригодится, буду юзать в своём креаторе



Минимум ОС: Win2000
Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

Цитата erd-zelen:



Может есть какой то инструмент чтобы с нуля скрипт не писать (я этого делать не умею)
.: NSIS - все вопросы :. часть 2.




учитесь писать..

простенькое IDE встроен в
nisedit2.0.3
проект давно не развивался, но простых задач сойдет.
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата kotkovets:



простенькое IDE встроен в nisedit2.0.3
.: NSIS - все вопросы :. часть 2.




там не работает создание проекта мастером, локацию просит указать а курсор туда не переводится.

Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

Цитата erd-zelen:



там не работает создание проекта мастером, локацию просит указать а курсор туда не переводится
.: NSIS - все вопросы :. часть 2.




сделайте редактор по умолчанию --> F11, установите NSIS, если не установлен .. O_o
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

сделал, не помогло. ось хр стоит. не пойму как язык туда прикрутить чтобы не ругался.
Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

Цитата erd-zelen:



сделал, не помогло. ось хр стоит. не пойму как
.: NSIS - все вопросы :. часть 2.




Справочник по NSIS русски в шапке темы - обязательно к чтению и изучению
Ответить

Вернуться в «Автоматическая установка приложений»