[архив].: NSIS - все вопросы :.
-
wolkow70
Re: [архив].: NSIS - все вопросы :.
kotkovets,
Существует ли какой-либо сопособ (плагин например) разлочить занятый эксплорером файл. Например по пиду процесса (подобно анлокеру).
Выясняется, что залоченный файл RarExt.dll (или аналогичные) можно в процессе деинсталляции переименовать напрмер в RarExt.dll.0.tmp переместив в папку TEMP, и удалить программную папку без перезагрузки. Это дает возможность сразу переустановить программу без перезагрузки. Но хочется уже в папке TEMP как-то добить этой файл, так как его удаление требует все-равно перезагрузки или перезапуска экспорера.
Еще задачка перед перемещением файла проверить временную папку на наличие файла с таким же именем, и если есть то переименовать RarExt.dll.0.tmp в RarExt.dll.(номер).tmp и задать комманду на удаление.
Существует ли какой-либо сопособ (плагин например) разлочить занятый эксплорером файл. Например по пиду процесса (подобно анлокеру).
Выясняется, что залоченный файл RarExt.dll (или аналогичные) можно в процессе деинсталляции переименовать напрмер в RarExt.dll.0.tmp переместив в папку TEMP, и удалить программную папку без перезагрузки. Это дает возможность сразу переустановить программу без перезагрузки. Но хочется уже в папке TEMP как-то добить этой файл, так как его удаление требует все-равно перезагрузки или перезапуска экспорера.
Еще задачка перед перемещением файла проверить временную папку на наличие файла с таким же именем, и если есть то переименовать RarExt.dll.0.tmp в RarExt.dll.(номер).tmp и задать комманду на удаление.
-
kotkovets
Re: [архив].: NSIS - все вопросы :.
Цитата wolkow70:
Поясните пожалуйста сколько раз могут последовательно повторяться макросы AndIf и OrIf ?
Сколь угодно теоритически, на практике сложнее - преобладание идет составных условий.
Здесь нужно правильно раставить логику, просто размышлять логически.
AndIf - логика И, срабатывает при выполнении двух условий, типа, если только палка колбасы
и сарделька, условие выполнения наличие двух продуктов...
OrIf - логика ИЛИ, срабатывает. если одно из условий выполняется, независимо от другога, к примеру,
если палка колбасы ИЛИ сарделька...достаточно имения одного из перечисленных продуктов. чтобы условие выполнилось.
Цитата wolkow70:
Пример на макросе ${IfNotThen}:По этому макросу из справки для меня не совсем понятно как он работает.
Условие отрицания - НЕ
то же самое для чисел с одной командой
Код:
для выражений, текста и т.д
Код:
Поясните пожалуйста сколько раз могут последовательно повторяться макросы AndIf и OrIf ?
[архив].: NSIS - все вопросы :.
Сколь угодно теоритически, на практике сложнее - преобладание идет составных условий.
Здесь нужно правильно раставить логику, просто размышлять логически.
AndIf - логика И, срабатывает при выполнении двух условий, типа, если только палка колбасы
и сарделька, условие выполнения наличие двух продуктов...
OrIf - логика ИЛИ, срабатывает. если одно из условий выполняется, независимо от другога, к примеру,
если палка колбасы ИЛИ сарделька...достаточно имения одного из перечисленных продуктов. чтобы условие выполнилось.
Цитата wolkow70:
Пример на макросе ${IfNotThen}:По этому макросу из справки для меня не совсем понятно как он работает.
[архив].: NSIS - все вопросы :.
Условие отрицания - НЕ
то же самое для чисел с одной командой
Код:
Код: Выделить всё
${If} 5 != 6
;5 не равно 6
${EndIf}для выражений, текста и т.д
Код:
Код: Выделить всё
${IfNot} колбаса == колбаса
;НЕльзя колбасу кушать
${EndIf}-
kotkovets
Re: [архив].: NSIS - все вопросы :.
Цитата wolkow70:
Не понятно ${IfThen} ${IfNotThen}
Это тоже самое, что
Код:
Сокращенное написание одной команды в условии вместо 3 строк и все!
Не понятно ${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 - все вопросы :.
kotkovets,
ага, а макрос в какую часть кода лучше вставить? в начало?
ага, а макрос в какую часть кода лучше вставить? в начало?
-
Ivn78
Re: [архив].: NSIS - все вопросы :.
kotkovets,
Подскажите плиз где ошибка в функции - счетчик не меняет значения
Код:
Call un.RarExt
Подскажите плиз где ошибка в функции - счетчик не меняет значения
Код:
Код: Выделить всё
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
FunctionEndCall un.RarExt
-
kotkovets
Re: [архив].: NSIS - все вопросы :.
Цитата wolkow70:
Так допустимо использовать?
конечно, можно добавить Else - иные условия, не удовлетворяющие выше условию и "объединить"
Код:
---
Кстати, очень часто попадает в файле такая строка:
Код:
В этом случае: $0 = 0 ; If enabled Opera will use Windows profiles to store individual user settings
Поэтому из полученной строки, лучше всего брать только первый символ и затем под логику отдавать:
Код:
Так допустимо использовать?
[архив].: 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 - все вопросы :.
Цитата kotkovets:
StrCpy $0 $0 1
Каждый раз надо прописывать в секциях перед логикой или один раз где-нибудь? Перед строкой ReadINIStr $0 или после?
StrCpy $0 $0 1
[архив].: NSIS - все вопросы :.
Каждый раз надо прописывать в секциях перед логикой или один раз где-нибудь? Перед строкой ReadINIStr $0 или после?
-
kotkovets
-
wolkow70
Re: [архив].: NSIS - все вопросы :.
Что-то не найду в справке как после команды
WriteINIStr имя_файла "секция" "параметр" "значение_параметра"
создать пустую следующую (или последнюю) строку.
WriteINIStr имя_файла "секция" "параметр" "значение_параметра"
создать пустую следующую (или последнюю) строку.