PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [56] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

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
Интернет и форум молчит...

Спасибо.

Flix
24-03-2014, 14:08
Цитата 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:

MKN
25-03-2014, 15:05
Обновился AccessControl plug-in Version: 1.0.8.0 (24th March 2014)
http://nsis.sourceforge.net/AccessControl_plug-in

Flix
25-03-2014, 16:08
Но.. не работает. »
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 создать ярлык сразу с правами администратора?

MKN
26-03-2014, 10:24
в 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,
Первые два варианта понравились. Работает.

MKN
28-03-2014, 10:38
Определение у пользователя прав администратора :


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 проблемы исчезли.

MaGoth
05-04-2014, 15:02
Привет народ... :)

Подскажите, как в инсталляторе отобразить еще одну страничку, не обязательно после странички с лицензионным сообщением, в которой текст из 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, подумал было перебираться выше, но что-то уже мало радует сия софтинка...

Flix
05-04-2014, 19:40
Как изменить дату создания файла »
Есть консольная утилита 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.

MaGoth
05-04-2014, 20:38
Есть консольная утилита timestomp, которая позволяет изменять время и дату создания файла (см. WIKI). »
Сейчас заценим софтинку, кстати она, тихий режим держит? Не хотелось бы чтобы при инсталлера ее окошко вылазило. Пдф-ку смотрел, но что-то так и не нашел упоминаний об этом.

Спасибо. :)

MaGoth
05-04-2014, 22:25
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