PDA

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


Страниц : 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 147 148 149 150 151 152 153 154 155 156 157 158 [159] 160 161 162 163 164 165 166 167 168 169 170

kotkovets
23-09-2012, 01:20
Oleg48, Вот такой маленький примерчик думаю "прояcнит" ситуацию насквозь...
смысл, в том - вставить этот код в любое место скрипта --> следить за значением переменной...
SetShellVarContext all
MessageBox MB_OK "$SMPROGRAMS" IDOK
SetShellVarContext current
MessageBox MB_OK "$SMPROGRAMS" IDOK
---
только я немного другой вопрос задавал.. »
ага.. а мы немного не так отвечаем...

Oleg48
23-09-2012, 09:24
kotkovets, спасибо за подсказку, только вот инсталлятор каторый я делаю, полностью тихий т. е. ничего неспрашивает и некаких вопросов пользователю незадает, как в этом случае усмотреть в какую папку ложаться ярлыки?

kotkovets
23-09-2012, 09:41
как в этом случае усмотреть в какую папку ложаться ярлыки? »
точно также - убедиться куда попадают ярлыки и убрать отладочный код - только сообщения.

wolkow70
23-09-2012, 16:40
kotkovets, может подскажите существует ли решение такой проблемы.

Пробую сделать сборку Daemon Tools Lite. Предусмотрено включение в сборку активированной бесплатной лицензии. Однако после распаковки ее в профиль программа файл лицензии не опознает. В тоже время, если просто скопировать файл через проводник , то все нормально. По хэшам файл не ломается (контрольные суммы совпадают). Если запаковать файл в архив и распаковать уже в профиле после установки, то тоже все нормально. Получается, что повреждаются какие аттрибуты файла через комманду File при компиляции скрипта. Пробовал с File /a все равно тоже самое.

K.A.V.
23-09-2012, 17:06
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 защитить все атрибуты файла при компиляции и при распаковке?

MKN
23-09-2012, 17:58
можно ли средствами 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"

Тут видимо, надо сохранить дату изменения файла, так как она прописывается и в самом файле для проверки активации лицензии.

MKN
23-09-2012, 18:29
надо сохранить дату изменения файла »
Дык дата изменения и сохраняется при File /a

wolkow70
23-09-2012, 19:02
Дык дата изменения и сохраняется при File /a »
Сохранял так атрибуты типа "скрытый", "для чтения" ...
Насчет даты изменения - спорный вопрос. Что-то тут не работает.
Может при распаковке дата последних изменения и открытия одновременно меняются ?

Creator000
23-09-2012, 19:17
K.A.V., нет, не работает. Состояние флажка 2 считывает, сплывает окно, а вот менять состояние флажка 1 не хочет.

Oleg48
24-09-2012, 13:24
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...

yyv
24-09-2012, 13:53
добрый день
страница 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
25-09-2012, 14:26
yyv
http://nsis.sourceforge.net/InstFile...s#Full_Example »
или я там чего-то не увидел, или там этого нет...

я уточню. Мне нужны операции не с кнопкой "отмена"
это я знаю как работает.
мне нужно сделать активным именно крестик закрытия окна.
В приведенной вами ссылке я не нашел этого.
Да и если скомпилировать "Full Example"
этот крестик во время выполнения INSTFILES так же остается неактивным..
теоретически Я должен получить доступ к WS_SYSMENU диалога...
Но пока еще не разобрался

MKN
25-09-2012, 15:23
Мне нужны операции не с кнопкой "отмена" это я знаю как работает.
мне нужно сделать активным именно крестик закрытия окна. »
А зачем ?

Salmo
26-09-2012, 21:16
Будьте добры, подскажите, как вписать в текстовый файл строку в кавычках
FileWrite $0 "OSZone.net $\r$\n", чтобы строка выглядела так: "OSZone.net"

Begin2Fly
26-09-2012, 21:25
Salmo, должно сработать: FileWrite $0 '"OSZone.net $\r$\n"'

Salmo
26-09-2012, 21:49
Begin2Fly, должно сработать: FileWrite $0 '"OSZone.net $\r$\n"' »
Я знаю, что сработает, но строка вписанная в файл, в данном случае имеет вид : OSZone.net, т.е. без двойных кавычек. Мне же нужен результат с кавычками : "OSZone.net"

Все понял! Слепота, не заметил одинарные кавычки...




© OSzone.net 2001-2012