|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
|
------- Отправлено: 12:02, 09-12-2012 |
|
Пользователь Сообщения: 129
|
Профиль | Отправить PM | Цитировать icq99999999,
перед созданием ярлыка, нужно создать папку ярлыка, иначе ярлык может не создаваться: CreateDirectory "$SMPROGRAMS\mod" CreateShortCut "$SMPROGRAMS\mod\mod.lnk" "$INSTDIR\mod.exe" Цитата icq99999999:
SetOutPath "$SMPROGRAMS\" RMDir /r /REBOOTOK "$SMPROGRAMS\mod" Цитата icq99999999:
|
||
|
Отправлено: 09:39, 25-10-2013 | #641 |
|
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать нужно распознать значение из ini
то есть в ini в секции Setting параметр (I)D будет значение например $EXEDIR вытяну значение ReadINIStr $1 "$INSTDIR\mod.ini" "Setting" "(I)D" но в переменную $1 будет скопировано сам текст $EXEDIR а мне нужно чтоб а но распознавалось и вместо текста $EXEDIR был путь exe ну то есть
как итог будет сообщение с текстом "вы запустили exe из $EXEDIR" а мне нужно чтоб был путь exe то есть например сообщение с текстом: "вы запустили exe из С:\1.exe" |
|
Последний раз редактировалось icq99999999, 25-10-2013 в 11:37. Отправлено: 11:20, 25-10-2013 | #642 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать |
|
------- Отправлено: 11:53, 25-10-2013 | #643 |
|
Новый участник Сообщения: 43
|
Профиль | Отправить PM | Цитировать K.A.V., Первую часть читал. Сидел ночью часа полтора и построчно "проходил" код, записывал как изменяются переменные. Забавно.
Function nsRkeeperIni
;!insertmacro var_message
${if} $NumCash > 0
Goto CreateTest0
${endif}
${IpPortMid_ar->Init}
${MID_ar->Init}
${RefServerMid_ar->Init}
${IPMidSrv_ar->Init}
${Station_ar->Init}
StrCpy $ini ".ini"
StrCpy $R6 "1"
StrCpy $R7 "1"
;!insertmacro var_message
StrCpy $NumMid "4"
StartTest0:
StrCpy $NumMidFlag "1" ;флаг входа в цикл NumMid
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Создаем Rkeeper.ini - Введите параметры ресторана ниже"
Pop $Label1
${NSD_CreateLabel} 0 13u 100% 12u "Имя кассового сервера:"
Pop $Label2
${NSD_CreateText} 0 25u 100% 13u "TEST_MIDSERVER" ;задаем имя клиента
Pop $MID
${NSD_CreateLabel} 0 38u 100% 12u "Кассовый сервер подсоединяестся к серверу:"
Pop $Label3
${NSD_CreateText} 0 50u 100% 13u "TEST_RK7SRV" ;задаем имя сервера к которому подсоединяемся
Pop $RefServerMid
${NSD_CreateLabel} 0 63u 100% 12u "IP-адрес и порт"
Pop $Label4
${NSD_CreateText} 0 75u 100% 13u "127.0.0.1:3669" ;
Pop $IpPortMid
${NSD_CreateLabel} 0 88u 100% 12u "Количество касс на данном кассовом сервере (1..50)"
Pop $Label25
${NSD_CreateText} 0 100u 100% 13u "1" ;
Pop $NumCash
;IntOp $R5 $NumCash -1
;MessageBox MB_OK "NumCash=$NumCash $\n MID=$MID $\n IpPortMid=$IpPortMid"
;!insertmacro var_message
;Задаем количество касс на кассовом сервере
;StrCpy $Num1 $NumCash ;зачем-то надо копировать. С Numcash не работает
nsDialogs::Show
${if} $R6 <= $NumMid
${andif} $NumCash == 0
Goto FinishTest0
${endif}
CreateTest0:
${if} $NumCash > 0
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Создаем wincash.ini - введите параметры кассовой станции"
Pop $Label8
${NSD_CreateLabel} 0 13u 100% 12u "Имя кассовой станции:"
Pop $Label9
${NSD_CreateText} 0 25u 100% 13u "TEST_ST01" ;задаем имя кассовой станции
Pop $Station
${NSD_CreateLabel} 0 38u 100% 12u "IP-адрес кассового сервера:"
Pop $Label10
${NSD_CreateText} 0 50u 100% 13u "127.0.0.1" ;
Pop $IPMidSrv
StrCpy $NumCashFlag "1" ;флаг разрешения входа в цикл NumCash
${endif}
nsDialogs::Show
IntOp $NumCash $NumCash - 1
;MessageBox MB_OK "Уменьшаю NumCash на 1 $\n Теперь NumCash=$NumCash"
FinishTest0:
${If} $NumCash == 0
IntOp $R6 $R6 + 1
;MessageBox MB_OK "Увеличиваю R6 на 1 $\n Теперь R6=$R6 $\n NumCash=$NumCash"
StrCpy $NumCashFlag "0" ;флаг запрета входа в цикл NumCash
${endif}
${if} $NumCash > 0
Goto CreateTest0
${endif}
${If} $R6 <= $NumMid
;${andif} $NumCash > 0
Goto StartTest0
${endif}
FunctionEnd
;работа с массивами тут необходима
Function nsRkeeperIniLeave
${if} $NumMidFlag == 1
${NSD_GetText} $NumCash $NumCash
${NSD_GetText} $MID $MID
${NSD_GetText} $RefServerMid $RefServerMid
${NSD_GetText} $IpPortMid $IpPortMid
;${NSD_GetText} $Num1 $Num1
${MID_ar->Write} $R6 "$MID"
${MID_ar->Read} $R2 $R6
${RefServerMid_ar->Write} $R6 "$RefServerMid"
${RefServerMid_ar->Read} $R3 $R6
${IpPortMid_ar->Write} $R6 "$IpPortMid"
${IpPortMid_ar->Read} $R4 $R6
!insertmacro var_message
!insertmacro MakeRkeeperIni
StrCpy $NumMidFlag "0" ;флаг выхода в цикл NumMid
StrCpy $NumCashFlag "0" ;флаг запрета входа в цикл NumCash - в принципе тут лишний
${endif}
${if} $NumCashFlag == 0
${orif} $NumCashFlag == ""
Goto FinishTest1
${endif}
${if} $NumCash < 1
${OrIf} $NumCash > 50
;MessageBox MB_OK "Задано слишком маленькое или большое количество станций $\n либо задано некорректное NumCash=$NumCash $\n $\n R6<NumCash ($R6<$NumCash) $\n Перезапустите инсталлятор"
${else}
;MessageBox MB_OK "На кассовой станции №$R6 $NumCash станций $\n R7=$R7"
${NSD_GetText} $Station $Station
;${NSD_GetText} $RefServer2 $RefServer2
${NSD_GetText} $IPMidSrv $IPMidSrv
${Station_ar->Write} $R7 "$Station"
${Station_ar->Read} $2 $R7
${IPMidSrv_ar->Write} $R7 "$IPMidSrv"
${IPMidSrv_ar->Read} $3 $R7
${NSD_GetText} $2 $2
${NSD_GetText} $3 $3
!insertmacro var_message
!insertmacro WinCashIniBat
IntOp $R7 $R7 + 1
${endif}
/*
${if} $NumCash
${if} $R6 < $NumMid
Goto FinishTest1
${endif}
*/
;;Íå îáÿçàòåëüíî, íî åñëè çàäàòü áóäåò êîííåêòèòüñÿ áûñòðåå, òî æå äëÿ êàññû
;;Èíîãäà íåîáõîäèìî (åñëè íå ïðîõîäÿò broadcast ñîîáùåíèÿ)
;;TEST_RK7SRV=127.0.0.1:3669
;MessageBox MB_OK "Внизу Numcash=$Numcash"
/*
*/
FinishTest1:
FunctionEnd
Форум читал - Ну страниц 50-80, наверное. Интересно . Не помню, кажется первую часть читал. Некоторые вещи просто сносят крышу и вызывают вопросы "как это работает??", но практически для меня неважны были всё равно.KAV, жалко ваших потраченных усилий, когда сам разобрался... Но спасибо. У вас способ короче намного, конечно. Пока в код досконально не всматривался. Но я так понимаю, что вы предлагаете перехватить управление кнопкой Next. На будущее возьму на заметку. Цитата:
|
|
|
------- Отправлено: 13:21, 25-10-2013 | #644 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата alexfinik:
![]() Ну, а то, что сами разобрались - это тоже хорошо, голова работает логически, в программировании это очень важно Цитата alexfinik:
Цитата alexfinik:
![]() Цитата alexfinik:
Если будут вопросы или проблемы с кодом, спрашивайте, не стесняйтесь ![]() |
||||
|
------- Отправлено: 13:39, 25-10-2013 | #645 |
|
Новый участник Сообщения: 43
|
Профиль | Отправить PM | Цитировать icq99999999, Вот с таким mod.ini всё работает
[Setting] (U)F=Example1 I(D)=Example2 (J)G=Example3 [NETKERN] ;возможные протоколы - nbhdup.dll, SPXSOC.dll Protocols=.\TCPSOC.dll [TCPSOC] LISTEN=0 [TCPDNS] Цитата K.A.V.:
|
|
|
------- Отправлено: 13:43, 25-10-2013 | #646 |
|
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
то есть с начало копирую в переменную ReadINIStr $1 "$exeDIR\mod.ini" "Setting" "(I)D" потом MessageBox MB_OK "$1" как итог будет сообщение с текстом "$PROGRAMFILES\не известное значение пришедшее в голову пользователя" нужно сообщение с текстом: "C:\Program Files\не известное значение пришедшее в голову пользователя" |
|
|
Отправлено: 14:27, 25-10-2013 | #647 |
|
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата icq99999999:
|
|
|
------- Отправлено: 14:32, 25-10-2013 | #648 |
|
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать Цитата kotkovets:
подхватываю значение ReadINIStr $0 "$1\mod.ini" "Setting" "(I)Vers" значение это путь установки который должен показаться в сообщении пользователю MessageBox MB_OK "$1" если в ini написано(притом может быть любая переменная nsis($SMPROGRAMS,$APPDATA итд) "$PROGRAMFILES\любой путь" то нужно определить эту переменную и (любой путь) и отправить в сообщении пользователю то есть например значение в ini $PROGRAMFILES\Portable то определить и отправить сообщение "C:\Program Files\Portable" если любая друга переменная пример $APPDATA\имя придуманное пользователем то определить и отправить сообщение "C:\Users\%username%\AppData\Roaming\имя придуманное пользователем" |
|
|
Последний раз редактировалось icq99999999, 25-10-2013 в 15:07. Отправлено: 15:00, 25-10-2013 | #649 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата icq99999999:
Делайте по принципу замены всех возможных переменных в прочитываемой строке, пример: И т.д. со всеми переменными |
|
|
------- Отправлено: 15:13, 25-10-2013 | #650 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
| [архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
| Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
| Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
| Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 | |
|