[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 39
Аватара пользователя
K.A.V.

Re: [архив].: NSIS - все вопросы :.

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

Цитата kotkovets:



wolkow70, сколько раз говорил, код в тег заключать(выделяем код, жмем кнопочку #), противно читать...
[архив].: NSIS - все вопросы :.




Да знаю я, мне в тегах неудобно читать.





Код:

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

${If} $8 == ""
 ${OrIf} $8 == "$ClassName"
 ${OrIf} $8 == "Applications\AIMP3.exe"
 ${Else}
 WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$8"

В том и дело, что тут, наоборот, при восстановлении ассоциаций, параметр реестра должен прописываться, если $8 не равна:

1. "" - пустому значению

2. значению "$ClassName" (текущему значению)

3. значению "Applications\AIMP3.exe" (назначению приложения)

Поэтому и разделил ${Else}. Может как-то по другому можно сформулировать?
Аватара пользователя
bugmenotagain

Re: [архив].: NSIS - все вопросы :.

Сообщение bugmenotagain »

Цитата wolkow70:



В том и дело, что тут, наоборот, при восстановлении ассоциаций, параметр реестра должен прописываться, если $8 не равна:
[архив].: NSIS - все вопросы :.






Код:

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

${Select} $8
   ${Case3} "" "$ClassName" "Applications\AIMP3.exe"
   ${CaseElse}
        MessageBox MB_OK "$8" IDOK
${EndSelect}

Вот это согласно поставленному условию
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Из справки:

Здесь макрос ${Case} может срабатывать до пяти значений переменной $0

Имеется в виду в один ${Case} можно включать до пяти значений?

Самих ${Case} может быть множество?

Почему в примере присвоено 3 ${Case3} - потому, что три значения, или любую нумерацию можно поставить?

Обладает ли такая формула преимуществами перед тем, что я написал?
Аватара пользователя
bugmenotagain

Re: [архив].: NSIS - все вопросы :.

Сообщение bugmenotagain »

Цитата wolkow70:



Здесь макрос ${Case} может срабатывать до пяти значений переменной $0

Имеется в виду в один ${Case} можно включать до пяти значений?
[архив].: NSIS - все вопросы :.




до 5 идин Case, правкой хедера можно и больше.. а можно и так:



Код:

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

----
   ${Case3} "" "$ClassName" "Applications\AIMP3.exe"
   ${Case5} "1" "---" "test" "nsis" "yyy" 
----


Цитата wolkow70:



Почему в примере присвоено 3 ${Case3} - потому, что три значения, или любую нумерацию можно поставить?
[архив].: NSIS - все вопросы :.




потому что, 3 значения одной переменной сравниваются.


Цитата wolkow70:



Обладает ли такая формула преимуществами перед тем, что я написал?
[архив].: NSIS - все вопросы :.




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

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

Re: [архив].: NSIS - все вопросы :.

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

kotkovets,



При совместном применении в макросе ${Select} и ${Switch} ${extenstion} скрипт не компилируется.





Код:

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

!macro RegisterExtension extenstion
Push $1
Push $2		
StrCpy $ClassName "AIMP.${extenstion}"
;
ReadRegStr $1 HKCU "Software\Classes\.${extenstion}" ""
${Select} $1
${Case2} "" "$ClassName"
${CaseElse}
WriteRegStr HKCU "Software\Classes\.${extenstion}" "AIMP.Backup" "$1" 
${EndSelect}
;
WriteRegStr HKCU "Software\Classes\.${extenstion}" "" "$ClassName"
WriteRegStr HKCU "Software\Classes\$ClassName\shell\open\command" "" "$OpenCommand"
WriteRegStr HKCU "Software\Classes\$ClassName\shell\open\DropTarget" "CLSID" "{0041494D-5033-4472-6F70-546172676574}"
WriteRegStr HKCU "Software\Classes\$ClassName\CLSID" "" "{0041494D-5033-4472-6F70-546172676574}"
;
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid"
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Application"
WriteRegBin HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\OpenWithProgids" "$ClassName" ""
;
${If} ${AtLeastWinVista}
ReadRegStr $2 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid"
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName"
${Select} $2
${Case2} "" "$ClassName"
${CaseElse}
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "AIMP.Backup" "$2"
${EndIf}
; 
${Switch} ${extenstion}	
${Case} "AAC"
StrCpy $IconIndex 0
WriteRegStr HKCU "Software\Classes\$ClassName" "" "AIMP3: Advanced Audio Codec"
${Break} 
${EndSwitch}
WriteRegStr HKCU "Software\Classes\$ClassName\DefaultIcon" "" "$IconFile,$IconIndex"	
 Pop $2
 Pop $1
!macroend
Аватара пользователя
bugmenotagain

Re: [архив].: NSIS - все вопросы :.

Сообщение bugmenotagain »

Цитата wolkow70:



${Select} $2

${Case2} "" "$ClassName"

${CaseElse}
[архив].: NSIS - все вопросы :.




не закрыт этот макрос перед ${EndIf}, читайте до дыр предыдущее мое сообщение
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата kotkovets:



не закрыт этот макрос
[архив].: NSIS - все вопросы :.




Подправил. Все работает отлично. Сборку обновил.
Аватара пользователя
celovec

Re: [архив].: NSIS - все вопросы :.

Сообщение celovec »

Когда появляется новая версия моей программы. Люди ее инсталлирую поверх старой программы.

Возможно ли NSIS заставить не перезаписывать некоторые файлы?

Тоесть есть файл settings.ini в нем хранятся настройки. И его не нужно перезаписывать (не нужно заменять на исходный который есть в инсталляторе).

Спасибо.
Аватара пользователя
K.A.V.

Re: [архив].: NSIS - все вопросы :.

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

Цитата wolkow70:



Пока сам сделал так, но думаю не идеальный вариант...
[архив].: NSIS - все вопросы :.




это бред, удалять пустой параметр ключа по умолчанию, здесь удаление ключа раздела(подраздела),

если он пуст и нет параметров.


Цитата:



Если прочитать данные невозможно, то в переменную user_var будет записано пустое значение - будет установлен флаг ошибки.



то можно и так, для ключа по умолчанию, если он пуст:



Код:

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

ClearErrors
ReadRegStr $6 HKCU "Software\Classes\.${extenstion}" ""
${If} ${Errors}
   MessageBox MB_OK "ключ пуст"
${Else}
   MessageBox MB_OK "$6"
${EndIf}
Аватара пользователя
celovec

Re: [архив].: NSIS - все вопросы :.

Сообщение celovec »

К сожалению я там не нашел ответ на свой вопрос.
Ответить

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