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

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

MKN
15-03-2013, 11:10
В примере лог конструкций Справки сказано " для

${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...
И так далее...

Aster
20-03-2013, 18:44
Привет всем.
Вопрос простой: подскажите, пожалуйста, какой командой удалять ярлыки с рабочего стола?

Команда Delete "$DESKTOP\имя ярылка.lnk" не срабатывает...

K.A.V.
20-03-2013, 19:02
Вопрос простой: подскажите, пожалуйста, какой командой удалять ярлыки с рабочего стола?
Команда 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

Aster
21-03-2013, 02:09
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

diakov
03-04-2013, 23:12
Добрый вечер есть плаг 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, если файл новее.

MKN
11-04-2013, 16:25
сравнить два файла на дату изменения »
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