Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets
13-03-2013, 18:54
Нужно, чтобы определялась Windows 8 »
ну и в чем дело?
outfile test.exe
!include "WinVer.nsh"
Section ""
${WinVerGetMajor} $0
${WinVerGetMinor} $1
StrCpy $0 $0$1
${If} $0 > 61
MessageBox MB_OK "Win8" IDOK
${Else}
MessageBox MB_OK "not Win8" IDOK
${EndIf}
SectionEnd
В примере лог конструкций Справки сказано " для
${Case5} и далее пять значений :
Здесь макрос ${Case} может срабатывать до пяти значений переменной $0
Почему 5 (4,3,2) - вроде как логично и понятно... Но почему, когда указываешь, к примеру : ${Case6} и далее шесть значений - ошибка ?
Или 5 - это и есть ограничение для макроса ? (а где про это вообще сказано ? ) Тогда в вышеприведённой цитате хорошо бы указывать - "не более пяти значений". Так было бы более конкретно и понятно... Вроде бы мелочь, но...
А если надо выбирать из 25 значений ?
wolkow70
15-03-2013, 15:15
Или 5 - это и есть ограничение для макроса ? »
Да, на пять сравнений только выполняется.
Из хедера LogicLib.nsh:
!macro _Case5 _a _b _c _d _e
!verbose push
!verbose ${LOGICLIB_VERBOSITY}
${CaseElse} ; Perform the CaseElse
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
!insertmacro _IncreaseCounter
!insertmacro _== `${${_Logic}Select}` `${_a}` +5 ""
!insertmacro _== `${${_Logic}Select}` `${_b}` +4 ""
!insertmacro _== `${${_Logic}Select}` `${_c}` +3 ""
!insertmacro _== `${${_Logic}Select}` `${_d}` +2 ""
!insertmacro _== `${${_Logic}Select}` `${_e}` "" ${${_Logic}Else}
!verbose pop
!macroend
!define Case5 `!insertmacro _Case5`
kotkovets
15-03-2013, 15:55
MKN, а правкой хидера можно и больше...
Ну добавь в логику ещё
{case5} и уже 10...
И так далее...
Привет всем.
Вопрос простой: подскажите, пожалуйста, какой командой удалять ярлыки с рабочего стола?
Команда Delete "$DESKTOP\имя ярылка.lnk" не срабатывает...
Вопрос простой: подскажите, пожалуйста, какой командой удалять ярлыки с рабочего стола?
Команда Delete "$DESKTOP\имя ярылка.lnk" не срабатывает... »
Команда верная, либо вы что-то не правильно прописываете, либо ещё чего...
А вообще, телепатов здесь нет...
Операционная система? Разрядность?
Может, дело в этом? Shortcuts removal fails on Windows Vista (http://nsis.sourceforge.net/Shortcuts_removal_fails_on_Windows_Vista)
kotkovets
20-03-2013, 19:04
Команда Delete "$DESKTOP\имя ярылка.lnk" не срабатывает »
смотря, где десктоп "лежит"..
outfile test.exe
Section
MessageBox MB_OK "$DESKTOP" IDOK
SetShellVarContext all
MessageBox MB_OK "$DESKTOP" IDOK
SectionEnd
K.A.V., ну у меня WinXP.
При таких командах ярлык с рабочего стола удалился.
SetShellVarContext all
Delete "$DESKTOP\имя ярлыка.lnk"
Спасибо за помощь!
KasIIysk
24-03-2013, 16:43
Ребята помогите с ссылкой http://winreview.ru/NSIS/472/Sozdanie-svoego-installyatora-na-NSIS-Realizatciya-dopolnitelnih-klyuchej-komandnoj-stroki , на новый сайт статью не перенели, это вроде бульдозера сайт, а тут ни у кого в закромах родины не осталось?
Создание своего инсталлятора на NSIS. Реализация дополнительных ключей командной строки вот название статьи
kotkovets
24-03-2013, 17:06
тут ни у кого в закромах родины не осталось? »
http://yadi.sk/d/G4dGLjPa3VTFp
wolkow70
27-03-2013, 14:37
Закрепление ярлыка программы на Панели задач в ОС Vista/Windows 7
В составе некоторых современных дистрибутивов появилась полезная утилита pin2taskbar.exe, позволяющая в процессе установки или деинсталляции приложений закрепить значок программы на Панели задач в ОC Vista/Windows 7 или изъять его. Я взял такую утилиту из оригинального дистрибутива KMPlayer.
Выложил для скачивания здесь:
http://rusfolder.com/35691315
Применение утилиты в скриптах NSIS может быть реализовано примерно таким образом:
!include "WinVer.nsh"
Var AppExe
Function .OnInit
StrCpy $AppExe "KMPlayer.exe" ; здесь присваиваем переменной имя исполняемого файла программы
FunctionEnd
Function PinToTaskbar
SetOutPath "$TEMP"
File pin2taskbar.exe
ExecWait '$TEMP\pin2taskbar.exe pin "$0"'
Delete "$TEMP\pin2taskbar.exe"
FunctionEnd
Section "Закрепить ярлык на Панели задач"
${If} ${AtLeastWinVista}
Push $0
StrCpy $0 '$INSTDIR\$AppExe' ; здесь присваиваем переменной местонахождение исполняемого файла
Call PinToTaskbar
Pop $0
${EndIf}
SectionEnd
Удаление:
Function Un.pinFromTaskbar
SetOutPath "$TEMP"
File pin2taskbar.exe
ExecWait '$TEMP\pin2taskbar.exe unpin "$0"'
Delete "$TEMP\pin2taskbar.exe"
FunctionEnd
Section Uninstall
${If} ${AtLeastWinVista}
Push $0
StrCpy $0 '$INSTDIR\$AppExe'
Call Un.pinFromTaskbar
Pop $0
${EndIf}
;
;
;
SectionEnd
kotkovets
27-03-2013, 19:02
Закрепление ярлыка программы на Панели задач в ОС Vista/Windows 7 »
и не только...
http://forum.oszone.net/post-1830962-2193.html
Добрый вечер есть плаг http://nsis.sourceforge.net/EBanner_plug-in в описании написано PNG (with transparency) are supported, тоесть PNG с поддержкой прозрачности поддерживается, но отображается он в инстальнике все равно на черном фоне, в чем может быть причина?
wolkow70
07-04-2013, 21:38
Закрепление ярлыка программы на Панели задач в ОС Vista/Windows 7 »
и не только...
http://forum.oszone.net/post-1830962-2193.html »
Почему-то открепление от Панели задач происходит не во всех случаях, в одних сборках работает, в других нет, хотя все делаю однотипно.
Закрепление всегда срабатывает.
Var AppExe
!include "InvokeShellVerb.nsh"
!include "WinVer.nsh"
Function un.onInit
StrCpy $AppExe "FSViewer.exe"
FunctionEnd
Section Uninstall
${If} ${AtLeastWinVista}
${UnPinTaskBar} "$INSTDIR\$AppExe"
${EndIf}
;
SectionEnd
wolkow70
08-04-2013, 14:23
Почему-то открепление от Панели задач происходит не во всех случаях »
Заметил, что если сделать промежуточную перезагрузку, то открепляется. Но странно, что в одних случаях она требуется, в других нет. Видимо, это как-то связано с кэшем иконок.
kotkovets
08-04-2013, 18:53
Почему-то открепление от Панели задач происходит не во всех случаях » »
всегда работает как часы... никто не жаловался..
${If} ${AtLeastWinVista} »
не нужно здесь это, все равно заработает, там где работает..
а работает от Vista и выше..
wolkow70
08-04-2013, 19:10
всегда работает как часы... »
Причем сам файл ярлыка тоже не удаляется, а на Панели остается пустой значок. А с перезагрузкой нормально работает. Пока на удаление оставил предложенную мной утилиту, она в 100% случаев работает. Хотя, ваш вариант нравится из-за дополнительных возможностей.
wolkow70
11-04-2013, 14:41
Товарищи, можно ли как-то сравнить два файла (без версии в ресурсах) на дату изменения (нужно определить более новый файл) ?
При этом речь идет не о проверке при распаковке, а нужно выполнить операцию CopyFiles, если файл новее.
сравнить два файла на дату изменения »
GetFileTime "путь\файл" $0 $1
MessageBox MB_OK $0 ; file created
MessageBox MB_OK $1 ; file last changed
далее сравниваешь либо даты последних изменений файла , либо даты создания...
Значения в переменных будут в виде ахинеи, что для сравнения не важно.
Но можно и переконвертировать в нормальный вид, например дату создания :
OutFile "Test_GetFileTime.exe"
!define FilePath "$EXEDIR\GetFileTime.nsi"
Section
GetFileTime "${FilePath}" $1 $0
System::Int64Op $1 * 0x100000000
Pop $1
System::Int64Op $1 + $0
Pop $0
System::Call "*(&i2, &i2, &i2, &i2, &i2, &i2, &i2, &i2) i .r1"
System::Call "Kernel32::FileTimeToSystemTime(*l r0, i r1)"
System::Call "Kernel32::GetDateFormatA(i 0, i 0, i r1, t 'dd/MM/yy', t .r0, i ${NSIS_MAX_STRLEN})"
System::Call "Kernel32::GetTimeFormatA(i 0, i 0, i r1, t 'HH:mm:ss', t .r1, i ${NSIS_MAX_STRLEN})"
MessageBox MB_OK "Файл создан: $0 $1"
SectionEnd
Ессно можно сделать поправку с учётом таймзоны
wolkow70
11-04-2013, 20:29
kotkovets,
Столкнулся с проблемой при закреплении ярлыка на панели задач (никак не хотел закрепляться).
Помогло выполнение ремонта кэша иконок перед выполнением макроса.
Вот таким образом:
ExecWait '"$SYSDIR\ie4uinit.exe" -ClearIconCache'
${PinToTaskBar} "$INSTDIR\$AppExe"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC