Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Ответить
Настройки темы
.: NSIS - все вопросы :. часть 2.

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: kotkovets
Дата: 07-06-2020
Описание: NSIS 3.05


Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.


Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать | Архив сборок версии

Первая часть этой темы
Скачать первую часть этой темы одним архивом

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

С пакетом NSIS поставляются несколько плагинов, позволяющих добавлять новые страницы, заменять фоновые изображения, скачивать файлы из Интернета, выполнять математические вычисления, обновлять файлы и многое другое.

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 09-12-2012

 

Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата Kopejkin:
Это обычный текстовый файл. »
Понятно, читай тогда справку в части:
[Примеры кодов] → [Работа со строками] » Замена строки в текстовом файле.
либо:
» Замена фразы в текстовом файле
Здесь можно подсмотреть пример по поиску строки по её номеру...

Последний раз редактировалось MaGoth, 12-02-2015 в 19:40.


Отправлено: 19:27, 12-02-2015 | #1501



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата MaGoth:
..пример по поиску строки по её номеру. »
Что-то не нашел именно этого примера. Номер текущей строки, насколько я понял, используется для последовательного перебора строк в диапазоне всего их количества.
Если я правильно читаю, то в примере "Замена фразы в текстовом файле" можно заменить все вхождения или только первое. А мне нужно заменить, например, только 5-е вхождение (текст, число), находящееся в 28-й строке.
А может я ничего и не понял...

Отправлено: 23:42, 12-02-2015 | #1502


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата Kopejkin:
Что-то не нашел именно этого примера. Номер текущей строки, насколько я понял, используется для последовательного перебора строк в диапазоне всего их количества. »
Можно такой еще вариант попробовать, из описание справки оригинала:
Скрытый текст
E.2 Text Functions Header
E.2.1 Introduction
Include header:

!include "TextFunc.nsh"
Call functions:

Section Install
${LineRead} "C:\a.log" "-1" $R0
; $R0="Last line$\r$\n"
SectionEnd
Section un.Install
${TrimNewLines} "Last line$\r$\n" $R0
; $R0="Last line"
SectionEnd
E.2.2 LineFind
Find specified lines in text file, and edit or view these lines in callback function.
Syntax:

${LineFind} "[File1]" "[File2|/NUL]" "[LineNumbers]" "Function"
"[File1]" ; Input text file
;
"[File2|/NUL]" ; [File2]
; Output text file
; If empty then File2=File1
; [/NUL]
; No output text file (only read File1)
;
"[LineNumbers]" ; [No|-No|No:No|{No}|{-No}|{No:No}]
; 1:-1 all lines to change (default)
; 2 second line from start
; -3 third line from end
; 5:9 range of lines from 5 to 9
; {2} only second line from start to output
; {-3} only third line from end to output
; {5:9} only range of lines from 5 to 9 to output
;
"Function" ; Callback function for specified lines

Function "Function"
; $R9 current line
; $R8 current line number
; $R7 current line negative number
; $R6 current range of lines
; $R5 handle of a file opened to read
; $R4 handle of a file opened to write ($R4="" if "/NUL")

; you can use any string functions
; $R0-$R3 are not used (save data in them).
; ...

Push $var ; If $var="StopLineFind" Then exit from function
; If $var="SkipWrite" Then skip current line (ignored if "/NUL")
FunctionEnd
Note:
- Error flag if input file doesn't exist
- Error flag if output file path doesn't exist
- Ranges must be specified on growth (2 4:5 9:-8 -5:-4 -2:-1)
- Output file will not be updated if no changes made.

Example1 (delete first two symbols):

Section
${LineFind} "C:\a.log" "C:\a-edited.log" "3:-1" "Example1"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example1
${TrimNewLines} '$R9' $R9
StrCpy $R9 $R9 '' 2
StrCpy $R9 '$R9$\r$\n'
;start from 3 line and delete first two symbols

Push $0
FunctionEnd
Example2 (show changed lines):

Section
${LineFind} "C:\a.log" "a.log" "{5:12 15 -6:-5 -1}" "Example2"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example2
${TrimNewLines} '$R9' $R9
StrCpy $R9 "$R9 ~Changed line ($R8)~$\r$\n"

Push $0
FunctionEnd
Example3 (delete lines):

Section
${LineFind} "C:\a.log" "\logs\a.log" "2:3 10:-5 -3:-2" "Example3"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example3
StrCpy $0 SkipWrite

Push $0
FunctionEnd
Example4 (insert lines):

Section
${LineFind} "C:\a.log" "" "10" "Example4
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example4
FileWrite $R4 "---First Line---$\r$\n"
FileWrite $R4 "---Second Line ...---$\r$\n"

Push $0
FunctionEnd
Example5 (replace in file with count of changes - "WordFunc.nsh" required):

!include "WordFunc.nsh"

Section
StrCpy $R0 0
${LineFind} "C:\a.log" "C:\logs\a.log" "1:-1" "Example5"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
MessageBox MB_OK "Changed lines=$R0"
SectionEnd

Function Example5
StrCpy $1 $R9

${WordReplace} '$R9' ' ' '_' '+*' $R9

StrCmp $1 $R9 +2
IntOp $R0 $R0 + 1
;$R0 count of changed lines

Push $0
FunctionEnd
Example6 (line string to cut or delete):

Section
${LineFind} "\a.log" "C:\logs\a.log" "" "Example6"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
MessageBox MB_OK "Processed lines=$R1:$R2"
SectionEnd

Function Example6
;(Cut lines from a line to another line (also including that line))
StrCmp $R0 finish stop
StrCmp $R0 start finish
StrCmp $R9 'Start Line$\r$\n' 0 skip
StrCpy $R0 start
StrCpy $R1 $R8
goto code
finish:
StrCmp $R9 'Finish Line$\r$\n' 0 code
StrCpy $R0 finish
StrCpy $R2 $R8
goto code
skip:
StrCpy $0 SkipWrite
goto output
stop:
StrCpy $0 StopLineFind
goto output

;;(Delete lines from a line to another line (also including that line))
; StrCmp $R0 finish code
; StrCmp $R0 start finish
; StrCmp $R9 'Start Line$\r$\n' 0 code
; StrCpy $R0 start
; StrCpy $R1 $R8
; goto skip
; finish:
; StrCmp $R9 'Finish Line$\r$\n' 0 skip
; StrCpy $R0 finish
; StrCpy $R2 $R8
; skip:
; StrCpy $0 SkipWrite
; goto output

code:
;...

output:
Push $0
FunctionEnd
Example7 (read lines):

Section
${LineFind} "C:\a.log" "/NUL" "1:-1" "Example7"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example7
MessageBox MB_OKCANCEL '$$R9 "Line"=[$R9]$\n$$R8 "#" =[$R8]' IDOK +2
StrCpy $0 StopLineFind

Push $0
FunctionEnd
E.2.3 LineRead
Get line in file specified with number.
Syntax:

${LineRead} "[File]" "[LineNumber]" $var
"[File]" ; Input text file
;
"[LineNumber]" ; [No|-No]
; 3 line number from start
; -5 line number from end
;
$var ; Result: Line
Note:
- Error flag if input file doesn't exist
- Error flag if line number not found

Example:

Section
${LineRead} "C:\a.log" "-1" $R0
; $R0="Last line$\r$\n"
SectionEnd
E.2.4 FileReadFromEnd
Read text file from end line by line.
Syntax:

${FileReadFromEnd} "[File]" "Function"
"[File]" ; Input text file
"Function" ; Callback function

Function "Function"
; $9 current line
; $8 current line number
; $7 current line negative number

; $R0-$R9 are not used (save data in them).
; ...

Push $var ; If $var="StopFileReadFromEnd" Then exit from function
FunctionEnd
Note:
- Error flag if input file doesn't exist

Example1:

Section
${FileReadFromEnd} "C:\a.log" "Example1"

IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example1
MessageBox MB_OKCANCEL '"Line"=[$9]$\n "#"=[$8]$\n "-#"=[$7]' IDOK +2
StrCpy $0 StopFileReadFromEnd

Push $0
FunctionEnd
Example2 (Reverse text file):

Section
GetTempFileName $R0
FileOpen $R1 $R0 w
${FileReadFromEnd} "C:\a.log" "Example2"
FileClose $R1

IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
Exec '"notepad.exe" "$R0"'
SectionEnd

Function Example2
StrCmp $7 -1 0 +5
StrCpy $1 $9 1 -1
StrCmp $1 '$\n' +3
StrCmp $1 '$\r' +2
StrCpy $9 '$9$\r$\n'

FileWrite $R1 "$9"

Push $0
FunctionEnd
E.2.5 LineSum
Get sum of lines in text file.
Syntax:

${LineSum} "[File]" $var
"[File]" ; Input file
$var ; Result: Sum of lines
Note:
- Error flag if input file doesn't exist

Example:

Section
${LineSum} "C:\a.log" $R0
; $R0="54"
SectionEnd
E.2.6 FileJoin
Join two files in one (File1 + File2 = File3).
Syntax:

${FileJoin} "[File1]" "[File2]" "[File3]"
"[File1]" ; Input File1
"[File2]" ; Input File2
"[File3]" ; Output File3
; If [File3]="" Then add [File2] to [File1]
Note:
- Error flag if input files don't exist
- Error flag if output file path doesn't exist

Example1 (Join: a.log + b.log = Z.log):

Section
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log"
SectionEnd
Example2 (Add: a.log + b.log = a.log):

Section
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log"
SectionEnd
E.2.7 TextCompare
Compare two text files.
Syntax:

${TextCompare} "[File1]" "[File2]" "[Option]" "Function"
"[File1]" ; File1 Compare these lines
"[File2]" ; File2 Compare with these lines
"[Options]" ; (line-by-line):
; FastDiff Compare line N (File1) with line N (File2)
; Call function if Different lines found
; FastEqual Compare line N (File1) with line N (File2)
; Call function if Equal lines found
; (line number independent):
; SlowDiff Compare line N (File1) with all lines (File2)
; Call function if line N (File1) Different
; SlowEqual Compare line N (File1) with all lines (File2)
; Call function if line N (File1) Equal
"Function" ; Callback function

Function "Function"
; $9 "Line File1"
; $8 "Line number"
; $7 "Line File2" (empty if SlowDiff)
; $6 "Line number" (empty if SlowDiff)

; $R0-$R9 are not used (save data in them).
; ...

Push $var ; If $var="StopTextCompare" Then exit from function
FunctionEnd
Note:
- Error flag if File1 or File2 doesn't exist
- Error flag if syntax error

Example (Different or Equal):

Section
StrCpy $R0 ''
${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Example1"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +4

StrCmp $R0 NotEqual 0 +2
MessageBox MB_OK "Files differ" IDOK +2
MessageBox MB_OK "Files identical"
SectionEnd

Function Example1
StrCpy $R0 NotEqual
StrCpy $0 StopTextCompare

Push $0
FunctionEnd
Example (Compare line-by-line - Different):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "FastDiff" "Example2"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2

Exec "notepad.exe $R2"
FunctionEnd

Function Example2
FileWrite $R3 '$8=$9'
FileWrite $R3 '$6=$7$\r$\n'

Push $0
FunctionEnd
Example (Compare line-by-line - Equal):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "FastEqual" "Example3"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2

Exec "notepad.exe $R2"
FunctionEnd

Function Example3
FileWrite $R3 '$8|$6=$9'

Push $0
FunctionEnd
Example (Compare all lines - Different):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "SlowDiff" "Example4"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK end

FileWrite $R3 "$\r$\n$R1 | $R0$\r$\n"
${TextCompare} "$R1" "$R0" "SlowDiff" "Example4"
FileClose $R3
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK end

Exec "notepad.exe $R2"

end:
FunctionEnd

Function Example4
FileWrite $R3 '$8=$9'

Push $0
FunctionEnd
Example (Compare all lines - Equal):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "SlowEqual" "Example5"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2

Exec "notepad.exe $R2"
FunctionEnd

Function Example5
FileWrite $R3 '$8|$6=$9'

Push $0
FunctionEnd
Example (Show variables):

Section
${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Example6"

IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example6
MessageBox MB_OKCANCEL '$$9 "Line File1" =[$9]$\n$$8 "Line #" =[$8]$\n$$7 "Line File2" =[$7]$\n$$6 "Line #" =[$6]' IDOK +2
StrCpy $0 StopTextCompare

Push $0
FunctionEnd
E.2.8 TextCompareS
Same as TextCompare, but case sensitive.
E.2.9 ConfigRead
Read value from entry name in config file.
Syntax:

${ConfigRead} "[File]" "[Entry]" $var
"[File]" ; config file
;
"[Entry]" ; entry name
;
$var ; Result: Value
Note:
- Error flag if entry not found
- Error flag if file doesn't exist

Example1:

Section
${ConfigRead} "C:\AUTOEXEC.BAT" "SET winbootdir=" $R0
;$R0=C:\WINDOWS
SectionEnd
Example2:

Section
${ConfigRead} "C:\apache\conf\httpd.conf" "Timeout " $R0
;$R0=30
SectionEnd
E.2.10 ConfigReadS
Same as ConfigRead, but case sensitive.
E.2.11 ConfigWrite
Write value from entry name in config file.
Syntax:

${ConfigWrite} "[File]" "[Entry]" "[Value]" $var
"[File]" ; config file
;
"[Entry]" ; entry name
;
"[Value]" ; value name
; if "" then delete Entry
;
$var ; Result:
; $var=CHANGED Value is written
; $var=DELETED Entry is deleted
; $var=ADDED Entry and Value are added
; $var=SAME Entry and Value already exist
Note:
- Error flag if file doesn't exist
- Error flag if file can't be opened

Example1:

Section
${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0
;$R0=CHANGED
SectionEnd
Example2:

Section
${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0
;$R0=SAME
SectionEnd
Example3:

Section
${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0
;$R0=DELETED
SectionEnd
E.2.12 ConfigWriteS
Same as ConfigWrite, but case sensitive.
E.2.13 FileRecode
Recode text file from DOS to Windows format and vice-versa.
Syntax:

${FileRecode} "[File]" "[Format]"
"[File]" ;
;
"[Format]" ; OemToChar -from DOS to Windows
; CharToOem -from Windows to DOS
Note:
- Error flag if file doesn't exist
- Error flag if syntax error

Example:

Section
${FileRecode} "C:\SCANDISK.LOG" "CharToOem"
SectionEnd
E.2.14 TrimNewLines
Trim newlines in a string.
Syntax:

${TrimNewLines} "[string]" $var
"[string]" ; Input string
$var ; Result: String without '$\r' and '$\n' at the end
Example:

Section
${TrimNewLines} "Text line$\r$\n" $R0
; $R0="Text line"
SectionEnd

Отправлено: 00:59, 13-02-2015 | #1503


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar TEST_Txt.rar
(576 байт, 8 просмотров)

Цитата Kopejkin:
Подскажите, можно ли заменить текст или число в определенной строке? Например, как на снимке: нужно заменить число 1 в строке, следующей за [SearchPOT]. »
Накидал небольшой по замене строки, синтакс:
${LineFind} "файл1" "файл2" "строка" "функция"

Добавь к своему проекту:
!include "TextFunc.nsh"

А далее как в примере:
Скрытый текст
XPstyle on
!include MUI2.nsh

Name "TestTXT"
OutFile TEST_Txt.exe
RequestExecutionLevel user

InstallDir "$EXEDIR\Test7z"
!insertmacro MUI_LANGUAGE English
!include "TextFunc.nsh"

Section "Test"
${LineFind} "$EXEDIR\MyText.txt" "" "9" "delines"
;IfErrors 0 +2
;MessageBox MB_OK "Error"
${LineFind} "$EXEDIR\MyText.txt" "" "9" "inlines"
;IfErrors 0 +2
;MessageBox MB_OK "Error"
SectionEnd

Function delines
StrCpy $0 SkipWrite
Push $0
FunctionEnd

Function inlines
FileWrite $R4 "Привет Kopejkin, это я, твоя изменённая строка.. $\n"
Push $0
FunctionEnd



Зы, Путь к файлу названия и прочее поменяешь сам на требуемое..
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:58, 13-02-2015 | #1504


Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата MaGoth:
...Накидал »
Спасибо, но это не то.
Как заменить уникальный (встречающийся 1 раз) текст я знаю - из примера в справочнике.
В моем же примере текст повторяется, т.е. уникален не текст, а номер строки.
Буду разбираться с примерами из ориг. справки

Отправлено: 03:34, 13-02-2015 | #1505


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата Kopejkin:
Спасибо, но это не то.
Как заменить уникальный (встречающийся 1 раз) текст я знаю - из примера в справочнике.
В моем же примере текст повторяется, т.е. уникален не текст, а номер строки.
Буду разбираться с примерами из ориг. справки »
Или я ничего не понял, или ты, одно из двух..

В своем вопросе ты писал:
Цитата Kopejkin:
Подскажите, можно ли заменить текст или число в определенной строке? Например, как на снимке: нужно заменить число 1 в строке, следующей за [SearchPOT]. »
Так вот, то что я написал в примере, как раз-таки цепляется к номеру строки, а само содержимое строки в данном случае не имеет значения..

Ну и вопросы до кучи, номер требуемой строки динамический что-ли?
Если да, то тут я хз, надо думать..
Или их несколько и везде надо менять? Если строки(а) статичны и неизменны в позициях, то смотри пример выше..


Зы, и скинь свой изменяемый текстовый файл, гляну что это такое...

Последний раз редактировалось MaGoth, 13-02-2015 в 12:48.


Отправлено: 03:58, 13-02-2015 | #1506


Пользователь


Сообщения: 108
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата MaGoth:
...или ты »
Да, это я тупанул. Спасибо еще раз!

Отправлено: 09:30, 13-02-2015 | #1507


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Привет народ,

Пара вопросов специфичных имеется.
У кого нибудь получилось скомпилить плагин Nsis7z_921 из представленных исходников?
И есть у кого желание поковыряться в нем и подлатать чуток, до нужной кондиции?

Отправлено: 22:17, 15-02-2015 | #1508


Аватара для Flix

Пользователь


Сообщения: 87
Благодарности: 49

Профиль | Отправить PM | Цитировать


Цитата MaGoth:
У кого нибудь получилось скомпилить плагин Nsis7z_921 из представленных исходников? »
Есть у программистов такая негласная защита от дурака: в опубликованных исходниках делать несколько ошибок. Опытные сразу поймут что-к-чему (по сообщениям компилятора) и исправят. А начинающие, или неопытные будут говорить, что у них ничего не получается.

MaGoth, желающих разбираться в чужих исходниках вы вряд ли найдете. Если вам интересно, а тем более назрела такая необходимость, попробуйте сделать это сами, а потом результат своей плодотворной работы предложить нам. Поверьте, вам скажут спасибо.

Отправлено: 22:49, 16-02-2015 | #1509


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MaGoth:
У кого нибудь получилось скомпилить плагин Nsis7z_921 из представленных исходников? »
Сомневаюсь, что это вообще кому-то нужно было, а у вас не получилось скомпилировать? Там же вроде всё есть, и проект даже от Visual Studio...
Никого не хочу обидеть, но ещё я сомневаюсь, что хотя бы половина кодеров на NSIS из этой темы писали плагины для NSIS

Цитата MaGoth:
И есть у кого желание поковыряться в нем и подлатать чуток, до нужной кондиции? »
А у вас, значит, нет желания поковыряться, чтобы реализовать нужный именно вам, функционал?))

Цитата Flix:
Есть у программистов такая негласная защита от дурака: в опубликованных исходниках делать несколько ошибок. Опытные сразу поймут что-к-чему (по сообщениям компилятора) и исправят. А начинающие, или неопытные будут говорить, что у них ничего не получается. »
Нужно взять на заметку и потом примеры здесь такие выкладывать заодно будем учить NSIS-кодеров самостоятельно исправлять ошибки в коде.

Цитата Flix:
Поверьте, вам скажут спасибо. »
У меня первая мысль, которая промелькнула - "Зачем?"

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 23:47, 16-02-2015 | #1510



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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




 
Переход