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

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

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

Сообщение wolkow70 »

kotkovets,

Существует ли какой-либо сопособ (плагин например) разлочить занятый эксплорером файл. Например по пиду процесса (подобно анлокеру).

Выясняется, что залоченный файл RarExt.dll (или аналогичные) можно в процессе деинсталляции переименовать напрмер в RarExt.dll.0.tmp переместив в папку TEMP, и удалить программную папку без перезагрузки. Это дает возможность сразу переустановить программу без перезагрузки. Но хочется уже в папке TEMP как-то добить этой файл, так как его удаление требует все-равно перезагрузки или перезапуска экспорера.

Еще задачка перед перемещением файла проверить временную папку на наличие файла с таким же именем, и если есть то переименовать RarExt.dll.0.tmp в RarExt.dll.(номер).tmp и задать комманду на удаление.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата wolkow70:



Поясните пожалуйста сколько раз могут последовательно повторяться макросы AndIf и OrIf ?
[архив].: NSIS - все вопросы :.




Сколь угодно теоритически, на практике сложнее - преобладание идет составных условий.

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

AndIf - логика И, срабатывает при выполнении двух условий, типа, если только палка колбасы

и сарделька, условие выполнения наличие двух продуктов...

OrIf - логика ИЛИ, срабатывает. если одно из условий выполняется, независимо от другога, к примеру,

если палка колбасы ИЛИ сарделька...достаточно имения одного из перечисленных продуктов. чтобы условие выполнилось.


Цитата wolkow70:



Пример на макросе ${IfNotThen}:По этому макросу из справки для меня не совсем понятно как он работает.
[архив].: NSIS - все вопросы :.




Условие отрицания - НЕ

то же самое для чисел с одной командой



Код:

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

${If} 5 != 6
   ;5 не равно 6
${EndIf}

для выражений, текста и т.д



Код:

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

${IfNot} колбаса == колбаса
   ;НЕльзя  колбасу кушать
${EndIf}
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата wolkow70:



Не понятно ${IfThen} ${IfNotThen}
[архив].: NSIS - все вопросы :.




Это тоже самое, что



Код:

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

${If} $0 == 5
   MessageBox MB_OK "$$0 = $0"
${EndIf}
;-------одной строкой
${IfThen} $0 == 5 ${|} MessageBox MB_OK "$$0 = $0" ${|}
/**********************************************/
${IfNot} $0 == колбаса
   MessageBox MB_OK $0
${EndIf}
;-------одной строкой
${IfNotThen} $0 == колбаса ${|} MessageBox MB_OK $0 ${|}

Сокращенное написание одной команды в условии вместо 3 строк и все!
Аватара пользователя
Ivn78

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

Сообщение Ivn78 »

kotkovets,

ага, а макрос в какую часть кода лучше вставить? в начало?
Аватара пользователя
Ivn78

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

Сообщение Ivn78 »

kotkovets,

Подскажите плиз где ошибка в функции - счетчик не меняет значения





Код:

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

Function un.RarExt
Push $2
Push $1
Push $0
;
${If} ${FileExists} "$INSTDIR\RarExt.dll.0.tmp"
StrCpy $2 0 
FindFirst $0 `$1` "$INSTDIR\RarExt*"
${Do}
IntOp $2 $2 + 1 
FindNext $0 `$1`
${LoopUntil} $1 == ``
FindClose $0
${If} $2 != 0
!insertmacro MoveFile "$INSTDIR\RarExt.dll" "$INSTDIR\RarExt.dll.$2.tmp"
${EndIf}
${Else}
!insertmacro MoveFile "$INSTDIR\RarExt.dll" "$INSTDIR\RarExt.dll.0.tmp"
${EndIf}
;
Pop $0
Pop $1
Pop $2
FunctionEnd

Call un.RarExt
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата wolkow70:



Так допустимо использовать?
[архив].: NSIS - все вопросы :.




конечно, можно добавить Else - иные условия, не удовлетворяющие выше условию и "объединить"



Код:

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

ClearErrors
ReadINIStr $0 "$INSTDIR\operaprefs_default.ini" "System" "Multi User"
${If} $0 == 0
      SetOutPath "$INSTDIR\profile"
${Else}
      ClearErrors
      SetOutPath "$APPDATA\Opera\Opera"
${EndIf}

---

Кстати, очень часто попадает в файле такая строка:



Код:

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

[System]
Multi User=0   ; If enabled Opera will use Windows profiles to store individual user settings

В этом случае: $0 = 0 ; If enabled Opera will use Windows profiles to store individual user settings

Поэтому из полученной строки, лучше всего брать только первый символ и затем под логику отдавать:



Код:

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

StrCpy $0 $0 1
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Цитата kotkovets:



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




Каждый раз надо прописывать в секциях перед логикой или один раз где-нибудь? Перед строкой ReadINIStr $0 или после?
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата wolkow70:



Перед строкой ReadINIStr $0
[архив].: NSIS - все вопросы :.




после ReadINIStr
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Что-то не найду в справке как после команды

WriteINIStr имя_файла "секция" "параметр" "значение_параметра"

создать пустую следующую (или последнюю) строку.
Ответить

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