Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Kopejkin
24-03-2014, 12:02
erd-zelen, вам же говорят: сначала установите NSIS (http://nsis.sourceforge.net/Main_Page). Как вариант, после установки NSIS, попробуйте переустановить nisedit2.0.3 или сменить его версию на предыдущую (http://www.oszone.net/go.php?url=http://sourceforge.net/projects/hmne/files/HM%20NIS%20Edit/).
На всякий случай: NSIS и nisedit2.0.3 - это не одно и то же ;)
erd-zelen
24-03-2014, 12:33
вот теперь понятно! что надо переустановить. бывалым то понятно в чем глюк, а новичку поди разберись... :)
alexfinik
24-03-2014, 13:56
Друзья, взялся за свои инсталлятор после 5-тимесячного перерыва. Спасибо завсегдатаям за помощь огромное - он работает. Но хочу доработать, а всё забыл:)
Пока не разобрался с командой дико редко встречаемой (только у меня в комментариях???) ${OpenBox}
Команда из пакета Dialogs.nsh
Там есть стандартная программа,
!include "dialogs.nsh"
Name "OpenBox-1"
OutFile "OpenBox-1.exe"
XPStyle on
ShowInstDetails show
Function .onInit
# Params:
# 1) Title: "Search for a TEXT file"
# 2) Filter: "Text (*.txt)|*.txt||"
# 3) FilterIndex: 1
# 4) InitDir: $EXEDIR
# 5) Style: 3 (default style)
# 6) Return: $6
${OpenBox} "Search for a TEXT file" "Text (*.txt)|*.txt||" 1 "$EXEDIR" 3 ${VAR_6}
FunctionEnd
Section
# See if the user selects a file:
${if} $6 == "${NULL}"
DetailPrint "Operation was canceled!"
${else}
DetailPrint "You choose: $6"
${endif}
SectionEnd
Которая выдает ошибку при запуске
Processing script file: "D:\Desktop\examples\OpenBox-2.nsi"
!include: "C:\Program Files (x86)\NSIS\Unicode\Include\dialogs.nsh"
File 'C:\Program Files (x86)\NSIS\Unicode\Include\dialogs.nsh' has no BOM and does not validate as UTF-8.
!define: "DIALOGS_NSH"=""
!include: closed: "C:\Program Files (x86)\NSIS\Unicode\Include\dialogs.nsh"
Name: "OpenBox-2"
OutFile: "OpenBox-2.exe"
XPStyle: on
ShowInstDetails: show
Function: ".onInit"
Invalid command: dialogsEx::FileBox
Error in script "D:\Desktop\examples\OpenBox-2.nsi" on line 16 -- aborting creation process
Не понимаю что значит Invalid command: dialogsEx::FileBox
Интернет и форум молчит...
Спасибо.
Цитата Kopejkin:
но так... тоже не работает »
Тогда сделайте вот так:
########## ПРИМЕР ##############
!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"
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
Соберите инсталлятор по этому примеру и проверьте. У меня на виртуальной оси Windows 8.1 ярлык деинсталлятора исправно создается. Проверить на реальной системе нет возможности, но думаю там также должен создаваться. Если у вас и после этого не будет работать, то тогда я не знаю, больше ничем помочь не могу, идеи все закончились. :)
Не понимаю что значит Invalid command: dialogsEx::FileBox »
Не установлен плагин DialogsEx (http://nsis.sourceforge.net/DialogsEx_plug-in)
Kopejkin
24-03-2014, 20:15
Flix, спасибо за терпение и советы.
Но.. не работает.
Тренируюсь тоже на виртуалке, причем специально установил 8.1 (до этого стояла 8).
Буду считать, что у других ярлык будет создаваться или откажусь от создания ярлыка в Установке/Удалении :sorry:
Обновился AccessControl plug-in Version: 1.0.8.0 (24th March 2014)
http://nsis.sourceforge.net/AccessControl_plug-in
Но.. не работает. »
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
wolkow70
26-03-2014, 09:45
Ребята, у кого-нибудь получалось в NSIS создать ярлык сразу с правами администратора?
в NSIS создать ярлык сразу с правами администратора »
С помощью ShellLink plug-in http://nsis.sourceforge.net/ShellLink_plug-in
С помощью громозды из кода : http://nsis.sourceforge.net/IShellLink_Set_RunAs_flag
С помощью правки HEX в самом ярлыке (придётся править заранее, т.к. внятного NSIS кода для этого, пока нет... )
С помощью изменения данных в реестре для запуска конкретной программы (это не оч корректно, но можно... )
wolkow70
26-03-2014, 10:33
MKN,
Первые два варианта понравились. Работает.
Определение у пользователя прав администратора :
OutFile "Admin_privileges.exe"
Section
System::Call "kernel32::GetModuleHandle(t 'shell32.dll') i .s"
System::Call "kernel32::GetProcAddress(i s, i 680) i .r0"
System::Call "::$0() i .r0"
IntCmp $0 1 +3
MessageBox MB_OK "Требуются права администратора для запуска этой установки"
Abort
SectionEnd
alexfinik
03-04-2014, 17:57
Оффтоп, но http://nsis.sourceforge.net/ не пашет, да? У меня на всех устройствах белый экран. При том, что домен 2го уровня работает.
Kopejkin
04-04-2014, 10:26
...не пашет »
А что вы там хотели открыть? Ссылка на страничку загрузки NSIS выглядит немного иначе (http://nsis.sourceforge.net/Download).
kotkovets
04-04-2014, 13:46
Оффтоп, но http://nsis.sourceforge.net/ не пашет, да? »
у меня вчера не работала ссылка, сейчас нормально
alexfinik
04-04-2014, 18:15
Друзья, а какие-либо массивы работают в не unicode версии? Смотрю, что стандартные версии известных скриптов выдают ошибку. Можно, конечно, написать разработчику, только, сдается, через год он мне и ответит:).
Либо вопрос, какие zip плагины работают в unicode версии? zipdll у меня не заработал там в этот раз, когда я начал ковыряться в своём:( коде
точнее это не работает в Unicode
ZipDLL::extractall "$6" "$INSTDIR\distr"
Про массив, единственное, что не выдает ошибок при компиляции у меня - это http://myweb.tiscali.co.uk/imker/downloads/Array.zip
версия 2.46 Ansi
alexfinik
04-04-2014, 19:20
Упс-упс-упс. Простите, установил 3.0, оказывается... Совсем сырая, видать. С установкой 2.46 проблемы исчезли.
Привет народ... :)
Подскажите, как в инсталляторе отобразить еще одну страничку, не обязательно после странички с лицензионным сообщением, в которой текст из rtf/txt файла будет отображен на том языке, который был выбран в начале установки, т.е. подобно странице лицензии? Создавать кастомную страницу или можно обойтись штатными средствами? »
Уже ранее ответили, но возможно кому пригодится и такой вариант решения:
http://forum.ru-board.com/topic.cgi?forum=5&topic=0595&start=900#19
Собственно мои вопросы, шарился по справке но что-то не нашел, или не там искал..
1. Как изменить дату создания файла (при компилировании этого файла после отработки программы), на нужную, т.е. автоматически назначаемую системную дату, изменить на требуемую.. Желательно с примерчиком.
2. Пока сижу на NSIS ANSI/UTF 2.46.5(с приблудами от Victor_VG), имеет ли смысл перебираться на тройку последней версии?!
Были ли решены где-либо извечные проблемы:
- исчезновение иконки и панели свойств файла по ПКМ(при достижении файлом размера свыше ~350 Мб);
- ограничение размерности файла инсталлятора на выходе в 2 ГБ.
?! :clever-ma
Спасибо.
.. установил 3.0, оказывается... Совсем сырая, видать. С установкой 2.46 проблемы исчезли. »
Сижу пока на 2.46.5, подумал было перебираться выше, но что-то уже мало радует сия софтинка...
Как изменить дату создания файла »
Есть консольная утилита timestomp (http://web.archive.org/web/20060719033234/http://www.metasploit.com/projects/antiforensics/timestomp.exe), которая позволяет изменять время и дату создания файла (см. WIKI (http://www.forensicswiki.org/wiki/Timestomp)).
Для автоматизации изменения даты и времени у созданного файла инсталлятора после компиляции, необходимо добавить в сценарий следующую команду:
// Изменение временных атрибутов файла инсталляции
// ${NSISDIR}\Bin\timestomp.exe - путь размещения и имя утилиты
// "%1" - вместо этой переменной будет поставлено имя файла инсталлятора
// -z - опция утилиты timestomp.exe (см. справку)
// "Saturday 10/08/2005 2:02:02 PM" - желаемая дата и время
!finalize '"${NSISDIR}\Bin\timestomp.exe" "%1" -z "Saturday 10/08/2005 2:02:02 PM"'
Изменения в версии 3.0 на сегодня по сравнению с декабрьским релизом (англ. язык):
r6457
Store datablock optimizer statistics as UINT64 in case the same large file is added many times
---------------------
r6456
!system decodes child output as OEMCP if GetConsoleOutputCP() == GetOEMCP(), this should help bug #1092 (or fix it completely?)
---------------------
r6455
Adding the same file twice can push cur_datablock over the 2GB limit because datablock_optimize() happens too late. Try to find a dupe early.
---------------------
r6454
Clarify the difference between the LANGFILE and LANGFILE_EXT macros.
---------------------
r6453
CreateShortCut > CreateShortcut
---------------------
r6452
Added CreateShortcut /NoWorkingDir optional parameter
---------------------
r6451
Fix bug #1088 and try even harder by using substring if possible
---------------------
r6450
Don't store wide and narrow versions of the same error string
---------------------
r6449
Print error when ExeHeadStringList::find is unable to convert to narrow string
---------------------
r6448
lstrcpy is overkill there
---------------------
r6447
Make sure SYSSTRUCT pointer members are correctly aligned for x64
---------------------
r6446
Don't list /amd64-unicode in !addplugindir help (makensis win32)
---------------------
r6445
Added P<, P<=, P=, P<>, P>= and P> LogicLib ptrdiff_t tests
---------------------
r6444
Basic AMD64 System::Call support
---------------------
r6443
Fixed some warnings
---------------------
r6442
Prevent MSVC 14.00.40310 from generating a recursive call to memset
---------------------
r6441
Calculate ctlcolors64 offset correctly
---------------------
r6440
DistributeInclude for plugins even when not building ANSI plugins
---------------------
r6439
Basic Win64 support (MSVC)
---------------------
r6438
Added Int32/64/Ptr helper macros to Util.nsh
---------------------
r6437
Fix GCC zip2exe/zlib z_crc_t type mismatch warning
---------------------
r6436
more conversion warning fixes
---------------------
r6435
fix gcc warning
---------------------
r6434
avoid warnings about stdcall being ignored
---------------------
r6433
and fix vc build too now... meh
---------------------
r6432
fixed build with mingw on ubuntu 64-bit
---------------------
r6431
Incorrect NSIS version in welcome text and MUI is not new
---------------------
r6430
Fixed winchar tests
---------------------
r6429
arg name is s not str
---------------------
r6428
mstoolkit.py now supports MSVC_USE_SCRIPT=None to import VC and SDK paths from environment variables
---------------------
r6427
POSIX fixes for native and crossplatform utils
---------------------
r6426
those are not available on mingw for whatever reason...
---------------------
Судя по переписке разработчиков, в версии 3.0 присутствуют определенные проблемы, которые еще не решены. Они рекомендуют для ответственных проектов пользоваться версией 2.46.
Есть консольная утилита timestomp, которая позволяет изменять время и дату создания файла (см. WIKI). »
Сейчас заценим софтинку, кстати она, тихий режим держит? Не хотелось бы чтобы при инсталлера ее окошко вылазило. Пдф-ку смотрел, но что-то так и не нашел упоминаний об этом.
Спасибо. :)
Flix,
Об читался весь, об смотрелся и на тестился, не хотит эта сволочь фурычить, мысли какие есть ?!
запускал так:
...
SetOutPath "$TEMP\${MOD_NAME_BASE} Installation"
nsExec::Exec '"$TEMP\${MOD_NAME_BASE} Installation\timestomp.exe" "$INSTDIR\data\fonts.VDF" -z "Tuesday 13/02/2001 17:46:44 PM"'
Pop $0
...
Пробовал прописывать тонну разных вариантов кавычек, как и запуск проги из того-же каталога где создается файл, также с разными кавычками и параметрами запуска... Ее окно видно что запускается и даже что-то там пишет.. но дата как стояла текущая системная так и стоит... :dont-know
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC