.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 45
Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

Цитата navab:



Как для каждой из них указать свою директорию?
.: NSIS - все вопросы :. часть 2.




Не совсем понятно, что вы имеете ввиду...



Как при отметке определённого компонента изменить каталог установки?


читать дальше »




Код:

Код: Выделить всё

Section /o "Мой компонент"
  StrCpy $INSTDIR "C:\Мой путь"
  SetOutPath "$INSTDIR"
  File "мой файл для упаковки.txt"
SectionEnd
Section /o "Мой компонент 2"
  StrCpy $INSTDIR "C:\Мой путь 2"
  SetOutPath "$INSTDIR"
  File "мой файл для упаковки 2.txt"
SectionEnd







Или как создать для каждого компонента отдельное запоминание папки?


читать дальше »




Код:

Код: Выделить всё

Section /o "Мой компонент"
Var /global MyVarComponent1
  StrCpy $MyVarComponent1 "C:\Мой путь"
  SetOutPath "$MyVarComponent1"
  File "мой файл для упаковки.txt"
SectionEnd
Section /o "Мой компонент 2"
Var /global MyVarComponent2
  StrCpy $MyVarComponent2 "C:\Мой путь 2"
  SetOutPath "$MyVarComponent2"
  File "мой файл для упаковки 2.txt"
SectionEnd
Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

K.A.V, нужно чтобы для каждого выбранного компонента пользователь мог сам выбрать путь, просто записать его в скрипте нельзя.

MKN, я так понял это примерно то что нужно, только код приведенный там не компилируется.



PHP код:

Код: Выделить всё

# variables to hold the installation directories 
var Component1Dir 
var Component2Dir 
var Component3Dir 

# components page 
!insertmacro MUI_PAGE_COMPONENTS 

# multiple directory pages 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Component1DirPre 
!define MUI_DIRECTORYPAGE_VARIABLE Component1Dir 
!insertmacro MUI_PAGE_DIRECTORY 

!define MUI_PAGE_CUSTOMFUNCTION_PRE Component2DirPre 
!define MUI_DIRECTORYPAGE_VARIABLE Component2Dir 
!insertmacro MUI_PAGE_DIRECTORY 

!define MUI_PAGE_CUSTOMFUNCTION_PRE Component3DirPre 
!define MUI_DIRECTORYPAGE_VARIABLE Component3Dir 
!insertmacro MUI_PAGE_DIRECTORY 

# The file installation 'page' 
!insertmacro MUI_PAGE_INSTFILES 

# The components (sections) 
Section Component1 
  # stuff here. Be sure to use the directory variable corresponding 
  # to the directory page used. In this case, for example: 
  SetOutPath "$Component1Dir" 
    File "somefile" 
    File "someotherfile" 
SectionEnd 

Section Component2 
  # stuff here 
  SetOutPath "$Component2Dir" 
    File "somefile" 
    File "someotherfile" 
SectionEnd 

Section Component3 
  # stuff here 
  SetOutPath "$Component3Dir" 
    File "somefile" 
    File "someotherfile" 
SectionEnd 

# Functions run before showing each directory page. 
# Here we'll call Abort to stop the page from showing up 
#  if the user didn't select the component 
Function Component1DirPre 
  # Get the flags for the section 
  SectionGetFlags ${Component1} $R0 
  # Binary 'and' with value '1' (selected or not) 
  IntOp $R0 $R0 & 1 
  # If it is not selected 
  IntCmp $R0 0 0 +2 
    # Then Abort. This will prevent the page from showing up 
    Abort 
  # Otherwise, continue 
FunctionEnd 

Function Component2DirPre 
  SectionGetFlags ${Component2} $R0 
  IntOp $R0 $R0 & 1 
  IntCmp $R0 0 0 +2 
    Abort 
FunctionEnd 

Function Component3DirPre 
  SectionGetFlags ${Component3} $R0 
  IntOp $R0 $R0 & 1 
  IntCmp $R0 0 0 +2 
    Abort 
FunctionEnd 






Error in macro MUI_PAGE_DIRECTORY on line 21
Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

А как же тогда делать? Ведь программа консольная... вот, посмотрите
http://cs.rin.ru/forum/download/file.php?id=13154
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

я так понимаю, что мы объявляем две константы времени компиляции. В эти переменные заносится результат возвращаемый Component1Dir например, вызывается макрос и вываливается ошибка в самом макросе:



PHP код:

Код: Выделить всё

!ifdef MUI_DIRECTORYPAGE_VARIABLE
      DirVar "${MUI_DIRECTORYPAGE_VARIABLE}"
    !endif 






K.A.V., сделал как Вы написали, всегда выскакивают 3 окна с указанием директории, сколько бы компонентов не было выбрано.
Аватара пользователя
Vincent7

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Vincent7 »

Цитата navab:



K.A.V., сделал как Вы написали, всегда выскакивают 3 окна с указанием директории, сколько бы компонентов не было выбрано.
.: NSIS - все вопросы :. часть 2.




Я вам дал часть проблемного кода, из-за которого вы получали ошибку компиляции





Код:

Код: Выделить всё

var Component1Dir 
var Component2Dir 
var Component3Dir 
!insertmacro MUI_PAGE_COMPONENTS 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Component1DirPre
!define MUI_DIRECTORYPAGE_VARIABLE $Component1Dir 
!insertmacro MUI_PAGE_DIRECTORY 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Component2DirPre
!define MUI_DIRECTORYPAGE_VARIABLE $Component2Dir 
!insertmacro MUI_PAGE_DIRECTORY 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Component3DirPre
!define MUI_DIRECTORYPAGE_VARIABLE $Component3Dir 
!insertmacro MUI_PAGE_DIRECTORY 
!insertmacro MUI_PAGE_INSTFILES 
Section TEST1 Component1 
  SetOutPath "$Component1Dir"
#    File "..." 
#    File "..." 
SectionEnd 
Section TEST2 Component2 
  SetOutPath "$Component2Dir" 
#    File "..." 
#    File "..." 
SectionEnd 
Section TEST3 Component3 
  SetOutPath "$Component3Dir" 
#    File "..." 
#    File "..." 
SectionEnd 
Function Component1DirPre 
  SectionGetFlags ${Component1} $R0 
  IntOp $R0 $R0 & 1 
  StrCmp $R0 "1" +2 0
    Abort 
FunctionEnd 
Function Component2DirPre 
  SectionGetFlags ${Component2} $R0 
  IntOp $R0 $R0 & 1 
  StrCmp $R0 "1" +2 0
    Abort 
FunctionEnd 
Function Component3DirPre 
  SectionGetFlags ${Component3} $R0 
  IntOp $R0 $R0 & 1 
  StrCmp $R0 "1" +2 0
    Abort 
FunctionEnd
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Спасибо, все работает. Если можно еще пару вопросов, просто хотел бы разобраться:

1.

PHP код:

Код: Выделить всё

StrCmp $R0 "1" +2 0
Abort 






что тут происходит?

2. Попробовал переделать функции таким образом:



PHP код:

Код: Выделить всё

var Component1Dir
var Component2Dir
var Component3Dir

var chek1
var chek2
var chek3

!insertmacro MUI_PAGE_COMPONENTS

!define MUI_PAGE_CUSTOMFUNCTION_PRE Component1DirPre
!define MUI_DIRECTORYPAGE_VARIABLE $Component1Dir
!insertmacro MUI_PAGE_DIRECTORY

!define MUI_PAGE_CUSTOMFUNCTION_PRE Component2DirPre
!define MUI_DIRECTORYPAGE_VARIABLE $Component2Dir
!insertmacro MUI_PAGE_DIRECTORY

!define MUI_PAGE_CUSTOMFUNCTION_PRE Component3DirPre
!define MUI_DIRECTORYPAGE_VARIABLE $Component3Dir
!insertmacro MUI_PAGE_DIRECTORY

!insertmacro MUI_PAGE_INSTFILES

# The components (sections)
Section Component1
  StrLen $0 "$MUI_PAGE_CUSTOMFUNCTION_PRE"
  SetOutPath "$Component1Dir"
SectionEnd

Section Component2
  # stuff here
  SetOutPath "$Component2Dir"
SectionEnd

Section Component3
  # stuff here
  SetOutPath "$Component3Dir"
SectionEnd

Function Component1DirPre
  SectionGetFlags ${Component1} $chek3
    MessageBox MB_OK "$chek3"
    ${If} $chek3 == 0
    Abort
    ${EndIf}
FunctionEnd

Function Component2DirPre
  SectionGetFlags ${Component2} $chek1
    MessageBox MB_OK "$chek1"
    ${If} $chek1 == 0
    Abort
    ${EndIf}
FunctionEnd

Function Component3DirPre
  SectionGetFlags ${Component3} $chek2
    MessageBox MB_OK "$chek2"
    ${If} $chek2 == 0
    Abort
    ${EndIf}
FunctionEnd 






Значения chek1-chek3 получаю все время одинаковые, либо все 0, либо все 1, соответственно вывод страниц работает не правильно. Что не так?
Аватара пользователя
Begin2Fly

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Begin2Fly »

Цитата navab:



что тут происходит?
.: NSIS - все вопросы :. часть 2.




Плохо читали справочник, попробуйте сами разобраться

Справочник по NSIS
=> Перевод справки NSIS => SectionGetFlags

+

Справочник по NSIS
=> Перевод справки NSIS => StrCmp




Цитата navab:



2. Попробовал переделать функции таким образом:
.: NSIS - все вопросы :. часть 2.




Я же вам сразу дал переделанные части кода, читайте в справочнике, как правильно прописывать секции

Справочник по NSIS
=> Перевод справки NSIS => Section

У вас секции без индексов (в ссылке, данной MKN изначально код не совсем рабочий), а в моём коде там поправлено, смотрите внимательней



Было (без указаний идентификаторов секций, как у вас сейчас):





Код:

Код: Выделить всё

Section Component3
  # stuff here
  SetOutPath "$Component3Dir"
SectionEnd

В моём коде:



Код:

Код: Выделить всё

Section TEST3 Component3
  SetOutPath "$Component3Dir" 
#    File "..." 
#    File "..." 
SectionEnd
Аватара пользователя
Begin2Fly

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Begin2Fly »

K.A.V., от этого батника мне пользы никакой нет. Я же писал- хочу автоматизировать и упростить процесс распаковки. Понимаете, в процессе программа будет просить нужные файлы, просить второй диск, а я хочу заранее в nsis задать все нужные данные в переменные, и исходя из сообщений распаковщика автоматически посылать их программе, чтобы вводить ничего не нужно было в процессе распаковки.
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Читал и то и другое, я так понял, что полсле опрератора должны идти метки, типа isless, isequal и т.п.

А такая форма

StrCmp $R0 "1" +2 0

означает, что если R0==1, то пропускаем следующую строчку? Но тогда мы просто попадаем на EndFunction, каким образом в этом случае срабатывает механизм отмены показа страницы?

По SectionGetFlags вопросов не было.

Да, идентификаторы я не заметил, а как они влияют на выполнение функций? Мы то вызываем SectionGetFlags ${Component1}, т.е. по имени обращаемся?



MKN, подскажите каким образом это сделать? Про кастом пайдж прочитал в справочнике, но как реализовать не совсем понятно.
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

и вдогонку, перед !insertmacro MUI_PAGE_COMPONENTS пишу !insertmacro MUI_PAGE_WELCOME - свал,

Error: resolving install function "Nsis2Io" in function "mui.WelcomePre_23.5.9"

Error - aborting creation process
Ответить

Вернуться в «Автоматическая установка приложений»