Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets
23-09-2012, 01:20
Oleg48, Вот такой маленький примерчик думаю "прояcнит" ситуацию насквозь...
смысл, в том - вставить этот код в любое место скрипта --> следить за значением переменной...
SetShellVarContext all
MessageBox MB_OK "$SMPROGRAMS" IDOK
SetShellVarContext current
MessageBox MB_OK "$SMPROGRAMS" IDOK
---
только я немного другой вопрос задавал.. »
ага.. а мы немного не так отвечаем...
kotkovets, спасибо за подсказку, только вот инсталлятор каторый я делаю, полностью тихий т. е. ничего неспрашивает и некаких вопросов пользователю незадает, как в этом случае усмотреть в какую папку ложаться ярлыки?
kotkovets
23-09-2012, 09:41
как в этом случае усмотреть в какую папку ложаться ярлыки? »
точно также - убедиться куда попадают ярлыки и убрать отладочный код - только сообщения.
wolkow70
23-09-2012, 16:40
kotkovets, может подскажите существует ли решение такой проблемы.
Пробую сделать сборку Daemon Tools Lite. Предусмотрено включение в сборку активированной бесплатной лицензии. Однако после распаковки ее в профиль программа файл лицензии не опознает. В тоже время, если просто скопировать файл через проводник , то все нормально. По хэшам файл не ломается (контрольные суммы совпадают). Если запаковать файл в архив и распаковать уже в профиле после установки, то тоже все нормально. Получается, что повреждаются какие аттрибуты файла через комманду File при компиляции скрипта. Пробовал с File /a все равно тоже самое.
wolkow70, может быть дата изменения файла меняется? Возможно это тоже влияет на файл лицензии (может быть защита по проверке времени изменения файла)
Creator000, интересно, сколько ещё вас нужно направлять читать файл справки
Вы логически думать умеете? У меня такое ощущение, что нет...
Без обид, ничего личного, нооо если чуток подумать, то можно применить команду StrCmp и проверять, отмечен ли второй флаг и, если отмечен, обнулять первый...Это ведь элементарная логика
Получится что-то на подобии этого...
StrCmp $RadioButton2_State "1" 0 +2
StrCpy $RadioButton1_State "0"
wolkow70
23-09-2012, 17:33
wolkow70, может быть дата изменения файла меняется? Возможно это тоже влияет на файл лицензии (может быть защита по проверке времени изменения файла) »
Скорее всего, так и есть.
Потому, что если делаю коммандой копирования из папки инсталлятора, так:
CopyFiles /silent "$EXEDIR\license.dat" "$APPDATA\DAEMON Tools Lite" , то принимается лицензия.
А если методом распаковки, так:
SetShellVarContext all
SetOutPath "$APPDATA\DAEMON Tools Lite"
File /a "${pkgdir}\license.dat" , то не принимается.
Если запаковать файл в 7z архив, и распаковать в директории назначения, то принимается.
Интересует, можно ли средствами NSIS защитить все атрибуты файла при компиляции и при распаковке?
можно ли средствами NSIS защитить все атрибуты файла при компиляции и при распаковке? »
4.9.1.5 File
If the /a switch is used, the attributes of the file(s) added will be preserved.
File /a something.exe
wolkow70
23-09-2012, 18:09
If the /a switch is used, the attributes of the file(s) added will be preserved. »
Это не помогает. У меня и так прописано
File /a "${pkgdir}\license.dat"
Тут видимо, надо сохранить дату изменения файла, так как она прописывается и в самом файле для проверки активации лицензии.
надо сохранить дату изменения файла »
Дык дата изменения и сохраняется при File /a
wolkow70
23-09-2012, 19:02
Дык дата изменения и сохраняется при File /a »
Сохранял так атрибуты типа "скрытый", "для чтения" ...
Насчет даты изменения - спорный вопрос. Что-то тут не работает.
Может при распаковке дата последних изменения и открытия одновременно меняются ?
Creator000
23-09-2012, 19:17
K.A.V., нет, не работает. Состояние флажка 2 считывает, сплывает окно, а вот менять состояние флажка 1 не хочет.
kotkovets, попробывал эксперементировать с получением переменных, вроде все получилось только, переменная обьявленная как глобальная почему-то ее значение невидится в секции удаления и приходится их дублировать:
...
;функция в которой определяется переменная пути установки
Function .onInit
Var /Global deliconAll
SetShellVarContext all
StrCpy $deliconAll "$SMPROGRAMS"
FunctionEnd
Section "MainSection" SEC01
...
;в этой секции значение переменной работает
CreateDirectory "$deliconAll\Total Commander"
CreateShortCut "$deliconAll\Total Commander\Total Commander.lnk" "$INSTDIR\Totalcmd.exe"
...
SectionEnd
Section -AdditionalIcons
;в этой секции значение переменной тоже работает
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$deliconAll\Total Commander\Web-сайт программы.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$deliconAll\Total Commander\Удалить программу.lnk" "$INSTDIR\uninst.exe"
SectionEnd
...
Section Uninstall
...
;в этой секции переменная существует, но значение уже неизвестно, и приходится повторять код
SetShellVarContext all
StrCpy $deliconAll "$SMPROGRAMS"
Delete "$deliconAll\Total Commander\Удалить программу.lnk"
Delete "$deliconAll\Total Commander\Web-сайт программы.lnk"
Delete "$deliconAll\Total Commander\Total Commander.lnk"
RMDir "$deliconAll\Total Commander"
;опять же приходится дублировать код удаления ярлыков из другово места т.к. ставиться это на Windows7x64
SetShellVarContext current
StrCpy $deliconAll "$SMPROGRAMS"
Delete "$deliconAll\Total Commander\Удалить программу.lnk"
Delete "$deliconAll\Total Commander\Web-сайт программы.lnk"
Delete "$deliconAll\Total Commander\Total Commander.lnk"
RMDir "$deliconAll\Total Commander"
...
SectionEnd
...
Подскажите пожалуйста, почему переменная в секции удаления теряет свое значения, и как избавиться от дублирования кода в этой секции?
kotkovets
24-09-2012, 13:50
Подскажите пожалуйста, почему переменная в секции удаления теряет свое значения, и как избавиться от дублирования кода в этой секции? »
все значения переменных из инсталлятора в деинсталлятор не переносятся
В основном, по моему мнению, сделано для гибкости, иначе деинсталлятор был бы "жестким".
Иначе, оборотная сторона гибкости NSIS...
добрый день
страница MUI_PAGE_INSTFILES
на ней неактивен крестик для закрытия инсталера
есть возможность сделать его активным?
Спасибо
Krinkels
24-09-2012, 15:27
yyv
http://nsis.sourceforge.net/InstFiles_Cancel_-_Allowing_a_user_to_cancel_installation_during_InstFiles#Full_Example
yyv
http://nsis.sourceforge.net/InstFile...s#Full_Example »
или я там чего-то не увидел, или там этого нет...
я уточню. Мне нужны операции не с кнопкой "отмена"
это я знаю как работает.
мне нужно сделать активным именно крестик закрытия окна.
В приведенной вами ссылке я не нашел этого.
Да и если скомпилировать "Full Example"
этот крестик во время выполнения INSTFILES так же остается неактивным..
теоретически Я должен получить доступ к WS_SYSMENU диалога...
Но пока еще не разобрался
Мне нужны операции не с кнопкой "отмена" это я знаю как работает.
мне нужно сделать активным именно крестик закрытия окна. »
А зачем ?
Будьте добры, подскажите, как вписать в текстовый файл строку в кавычках
FileWrite $0 "OSZone.net $\r$\n", чтобы строка выглядела так: "OSZone.net"
Begin2Fly
26-09-2012, 21:25
Salmo, должно сработать: FileWrite $0 '"OSZone.net $\r$\n"'
Begin2Fly, должно сработать: FileWrite $0 '"OSZone.net $\r$\n"' »
Я знаю, что сработает, но строка вписанная в файл, в данном случае имеет вид : OSZone.net, т.е. без двойных кавычек. Мне же нужен результат с кавычками : "OSZone.net"
Все понял! Слепота, не заметил одинарные кавычки...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC