Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Почтенные ГУРУ подскажите пожалуйста как вместо ярлыка *.lnk [параметры "http:/ тру-ля-ля"] вставить значение *.url - Ярлыка интернета с прописанным адресом страницы. Именно значение, а не .lnk ссылку на таковой ярлык
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.lnk" "${PRODUCT_WEB_SITE}" "" "" "" "" "" "${PRODUCT_NAME} в Интерненте"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.url" "" "" "" "" "" "" ""
Как вставить InternetShortcut ?
Заранее Спасибо
kotkovets
23-03-2012, 23:40
Valdise, а чем плох обычный ярлык, который ссылается на адрес в сети:
CreateShortCut "$EXEDIR\aimp.lnk" "http://wwww.aimp.ru" "" "shell32.dll" 220
а url делается так:
WriteINIStr "$EXEDIR\aimp.url" "InternetShortcut" "URL" "http://wwww.aimp.ru"
но мне лично первый вариант куда лучше...
kotkovets, по хорошему, нужно делать и первый и второй вариант
Почему второй вариант нужен?
Например для Portable программ, будет очень хорошо зайдя в папку с программой, "ткнуть" на url файл и перейти на домашнюю страничку
а чем плох обычный ярлык, который ссылается на адрес в сети: »Почему второй вариант нужен? »
Обычно так и делаю - *.lnk.
Иногда делаю перепаки полных русских версий, чтобы в два клика, а не париться программа, русификатор, регистрация\кряки. В одной из программ, в авторской сборке, в ярлыках именно URL а не LNK вот и заинтересовало, захотел сделать так-же, как в Авторском оригинале, правда он собран ISetup, а мне он совершенно не нравится.
WriteINIStr "$EXEDIR\aimp.url" "InternetShortcut" "URL" "http://wwww.aimp.ru" »
Растолкуйте чайнику, плиз - всё это строка, так-же как "CreateShortCut", или это всё-же ini-команда, которая создаст в папке программы "$EXEDIR\aimp.url"? Дело в том, что в оригинале url файл только в папке ярлыков, т.е его нет в $INSTDIR, а тут"$EXEDIR\aimp.url"???
ВОПРОС: К слову, а для NSIS путь $EXEDIR и $INSTDIR равны и имеют одинаковое значение?
kotkovets
25-03-2012, 11:02
Valdise, url это обычный текстовый конфигурационный файл - ярлык Интернета
Дело в том, что в оригинале url файл именно в папке ярлыков, а не в програмфайл »
так и укажите в скрипте, где создавать url.
так и укажите в скрипте, где создавать url. »
Растолкуйте, пожалуйста что и в каком порядке написать в скрипте, для создания такого ярлыка:
WriteINIStr "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
Верно? Только почему-то NSIS ругается, говорит ошибка...
Сообразил, всё получилось, ОГРОМНОЕ спасибо :Beer:
P.S Не сразу сообразил и заметил чего NSIS требовал - Error in script WriteINIStr expects 4 parameters, got 8, т.к оставил 8 кавычек, как в обычном *.lnk
ВОПРОС: К слову, а для NSIS путь $EXEDIR и $INSTDIR равны и имеют одинаковое значение?
kotkovets
25-03-2012, 13:49
Valdise, все вопросы в шапке темы в справочнике, хотите гадать на кофейной гуще - дело ваше.
Подскажите пожалуйста , как решить такую задачу :
Нужно, чтобы последовательность из 5 команд "${WordReplace} и т.д.", выполнилась N раз подряд, причём значение переменной $R1 в каждой команде , с каждым следующим "проходом", должно увеличиваться на 1.
N - берётся из переменной $1
Пытался организовать цикл ${For} с счётчиком, но команды ${WordReplace} внутри него не срабатывают...
Если нельзя организовать 5 командную последовательность, то как организовать вышеназванные действия для одной команды ${WordReplace}?
kotkovets
25-03-2012, 17:03
Нужно, чтобы последовательность из 5 команд "${WordReplace} и т.д.", выполнилась N раз подряд, причём значение переменной $R1 в каждой команде , с каждым следующим "проходом", должно увеличиваться на 1. »
ну так для этого есть цикл For, тут важно, сколько этих циклов нужно делать, или другой признак выхода из цикла.
${for} $1 1 10
MessageBox MB_OK "$1" IDOK
${next}
здесь цикл начнется, отсчет $1=1, до $1=10 - условие выхода из цикла
можно организовать цикл и так:
${Do}
IntOp $1 $1 + 1
MessageBox MB_OK "$1" IDOK
${LoopUntil} $1 == 10
здесь условие выхода из цикла, если $1=10,
любой цикл можно прервать макросом - ${Break}
здесь цикл начнется, отсчет $1=1, до $1=10 - условие выхода из цикла »
Вроде как, так и делал...
Может я не правильно использую код для замены...
Делаю так :
Section
${LineFind} "a.txt" "" "1:-1" "Replace"
IfErrors 0 +2
MessageBox MB_ICONSTOP|MB_OK "Файл не найден!"
SectionEnd
Function Replace
${For} $R1 $R0 3
IntOp $R2 $R0 + 1
${WordReplace} '$R9' '=$R0' '=$R2' "+" '$R9'
Push $0
${Next}
FunctionEnd
Всё время - "Файл не найден"
И с ${ForEach} , что как мне кажется лучше, ничего не выходит...
kotkovets
25-03-2012, 17:52
MKN, а зачем здесь цикл в функции чтения файла :o , здесь и так цикл работает в функции Replace
до конца файла, в голову не приходила мысль откуда берутся строки в $R9 до конца файла?
это получается, один цикл функции на три цикла вложенного цикла фор, с каждым циклом, то переменная $R9 разная,
причем не известно условие выхода из внутреннего цикла:
IntOp $R2 $R0 + 1 - что это? :o
${For} $R1 $R0 3
$R1 - c каждым циклом и так увеличивается на единицу, причем отсчет начнется от величины значения $R0,
выход из внутреннего цикла, если $R1 = 3, а если $R0 > 3 (начало отсчета), что будет проверял?
ну месаджексы проставь, проследи за значениями переменных $R1 и $R0
kotkovets,
Нужно в таком файле :
count=5
a1
b1
c1
d1
e1
a2
b2
c2
d2
e2
a3
b3
c3
d3
e3
a4
b4
c4
d4
e4
a5
b5
c5
d5
e5
где количество пронумерованных групп (a...e), записанное в значение count (т.е. равное кол-ву групп) и состав групп - всегда разные.
В этот файл нужно, записывать ещё одну группу, номер которой будет также произвольным (от 1 до count+1)
При этом вся последующая нумерация групп, после "вставки" новой группы, смещается на 1.
Я и хочу заменять нумерацию значений "от" и "до", (по сути смещение значений на 1) - в зависимости от значения count и местоположения новой группы.
все вопросы в шапке темы в справочнике, хотите гадать на кофейной гуще - дело ваше. »
На новости раздела я подписан, за русский Help поблагодарил сразу после его выхода
P.S I думаю что Ваш ответ "ДА" - "НЕТ", или "+" "-" был-бы более приемлемым
P.S II ещё раз ОГРОМНОЕ спасибо за помощь!
kotkovets
25-03-2012, 21:36
P.S I думаю что Ваш ответ "ДА" - "НЕТ", или "+" "-" был-бы более приемлемым »
достаточно прочитать в справке про (предопределенные)переменные - минут 5 и все вопросы будут исчерпаны...
Если чем-то оскорбил - пардону просим (+ см ЛС)
Можно новый вопрос?
Почему на некоторых системах WinX32 бинарные значения при установке упорно не желают прописываться?
Из 113 установок 28 почему-то "взбрыкнули" (за статистику спасибо пользователям ru-board-a)
Конкретно - крякунутый PhotoInstrument 5.5 на большинстве систем молча кушает прописываемые значения в Реестр, а на некоторых упирается рогом и при первом запуске программа успевает нацарапать своё "Купить"
Olef2387
26-03-2012, 14:06
kotkovets. Привет.
Возник вопрос изменения ресурсов... На странице установки хочу опустить прогресс бар чуть пониже и небольшую картинку на этой же странице разместить (хотелось бы это сделать без плагинов). а то пробовал как-то плагин, картинка работала только на хп, а на висте и семёрке не отображалась.
kotkovets
26-03-2012, 15:07
Возник вопрос изменения ресурсов... На странице установки хочу опустить прогресс бар чуть пониже »
NSIS\Contrib\UIs\modern.exe --> 106 диалог, элемент 1004 - прогресс бар.
небольшую картинку на этой же странице разместить (хотелось бы это сделать без плагинов) »
можно, но много букафф через апи функцию
CreateWindowEx (http://www.firststeps.ru/mfc/winapi/win/r.php?58)
если апи не знаете, то код приводить бессмысленно
kotkovets,
То, что отсчёт будет происходить от и до, понятно, (но видно только при "служебных сообшениях") :
${for} $1 1 10
MessageBox MB_OK "$1" IDOK
${next}
А каким образом записать последовательность значений отсчёта
а - в файл ?
b - в переменные (чего очень хотелось бы !), где каждое значение (от 1 до 10 в данном примере), "прирощенное" в каждом отсчёте цикла, записывается в свою переменную ? Т.е. небходимы 10 переменных. Ну, очень...
kotkovets
27-03-2012, 11:15
MKN, StrCpy не пробывал, работу со строкой, брать 1 символ строки или последний один символ, кидать в свою переменную,
если строка имеет вид: a1, то StrCpy $count $R9 "" 1
$count = 1$\r$\n или $count = 1, если StrCpy $count1 $R9 1 то, $count1 = a
дальше логика И-ИЛИ, метод сравнения, ведь в одном цикле прохода $R9 неизменна.
Всё равно не ясно, как перенумеровывать значения, находящиеся в середине текста строк (ещё и в разных местах), в не предсказуемом кол-ве строк...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC