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

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

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

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

Закрепление ярлыка программы на Панели задач в ОС 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
Аватара пользователя
MKN

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

Сообщение MKN »

Цитата wolkow70:



Закрепление ярлыка программы на Панели задач в ОС Vista/Windows 7
.: NSIS - все вопросы :. часть 2.




и не только...

[архив].: NSIS - все вопросы :.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Добрый вечер есть плаг
http://nsis.sourceforge.net/EBanner_plug-in
в описании написано PNG (with transparency) are supported, тоесть PNG с поддержкой прозрачности поддерживается, но отображается он в инстальнике все равно на черном фоне, в чем может быть причина?
Аватара пользователя
MKN

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

Сообщение MKN »

Цитата kotkovets:



Закрепление ярлыка программы на Панели задач в ОС Vista/Windows 7 »

и не только...

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




Почему-то открепление от Панели задач происходит не во всех случаях, в одних сборках работает, в других нет, хотя все делаю однотипно.

Закрепление всегда срабатывает.





Код:

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

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
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата wolkow70:



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




Заметил, что если сделать промежуточную перезагрузку, то открепляется. Но странно, что в одних случаях она требуется, в других нет. Видимо, это как-то связано с кэшем иконок.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата wolkow70:



Почему-то открепление от Панели задач происходит не во всех случаях »
.: NSIS - все вопросы :. часть 2.




всегда работает как часы... никто не жаловался..


Цитата wolkow70:



${If} ${AtLeastWinVista}
.: NSIS - все вопросы :. часть 2.




не нужно здесь это, все равно заработает, там где работает..

а работает от Vista и выше..
Аватара пользователя
Lex_from_Belarus

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

Сообщение Lex_from_Belarus »

Цитата kotkovets:



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




Причем сам файл ярлыка тоже не удаляется, а на Панели остается пустой значок. А с перезагрузкой нормально работает. Пока на удаление оставил предложенную мной утилиту, она в 100% случаев работает. Хотя, ваш вариант нравится из-за дополнительных возможностей.
Аватара пользователя
K.A.V.

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

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

Товарищи, можно ли как-то сравнить два файла (без версии в ресурсах) на дату изменения (нужно определить более новый файл) ?

При этом речь идет не о проверке при распаковке, а нужно выполнить операцию CopyFiles, если файл новее.
Аватара пользователя
ASiRU

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

Сообщение ASiRU »

Цитата wolkow70:



сравнить два файла на дату изменения
.: NSIS - все вопросы :. часть 2.






Код:

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

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

Ессно можно сделать поправку с учётом таймзоны
Аватара пользователя
alert30

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

Сообщение alert30 »

kotkovets,

Столкнулся с проблемой при закреплении ярлыка на панели задач (никак не хотел закрепляться).

Помогло выполнение ремонта кэша иконок перед выполнением макроса.

Вот таким образом:

ExecWait '"$SYSDIR\ie4uinit.exe" -ClearIconCache'

${PinToTaskBar} "$INSTDIR\$AppExe"
Ответить

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