Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Begin2Fly
15-02-2022, 19:08
переименования папки »
Перевод справки NSIS - Rename
динозавра
15-02-2022, 19:19
Begin2Fly, Спасиба, но вы дали переименование файла. Это в справке аж в двух местах указано. А мне нужно "если по такому то пути найдена папка "Вася", то переименовать ее на "Вова". Папка, не файл.
Begin2Fly
15-02-2022, 19:25
динозавра, не спорьте, а используйте Rename для переименования файлов и папок.
динозавра
15-02-2022, 19:34
Begin2Fly, Хорошо, попробую. Но как тогда написать "если по такому то пути найдена папка". Я знаю только для файла
IfFileExists
и
${If} ${FileExists}
Нужно для папки.
Begin2Fly
15-02-2022, 19:37
динозавра, и то, и то сработает. Используйте на своё усмотрение.
Как в NSIS создать текстовый документ.
А при удалении его, исполняемый файл не запускался, и выводил сообщение что удалён текстовый документ?
ZVSRus,
Создание файлов - FileOpen/FileClose
Проверка на существование - IfFileExists
Примеры есть в справке
iglezz
Может не внятно задал вопрос. Есть такой скрипт для создания портативной программы. При компиляции портативной версии нужно чтобы рядом с лаунчером создался пустой текстовый документ. В него ничего писаться не будет. При удалении данного документа лаунчер не запускался и выводил сообщение что текстовый документ удалён.
PS: В скриптах NSIS полный 0.
В процессе компиляции файл можно создать командой !appendfile
!define MYLOCKFILE "CreateFileAtCompileTime.txt"
!appendfile "${MYLOCKFILE}" ""
Name "CreateFileAtCompileTime"
ShowInstDetails show
AutoCloseWindow false
RequestExecutionLevel user
Page instfiles
Section
SectionEnd
Function .onInit
IfFileExists "$EXEDIR\${MYLOCKFILE}" +3 0
MessageBox MB_OK|MB_ICONSTOP "Верни мой файл! $\n $EXEDIR${MYLOCKFILE}"
Quit
FunctionEnd
ЗЫ. В шапке есть русскоязычный справочник - он несколько устарел и неструктурирован, но как базовый подойдёт.
Язык NSIS по объёму небольшой, за пару вечеров основы усвоить можно.
iglezz,
Спасибо за пример, Буду пробовать.
Но решение нашел методом тыка
Создал рядом с лаунчером текстовый документ (Readme.txt)
Переделал функцию:
Function CheckDirExe
IfFileExists "$EXEDIR\${APPDIR}\${APPEXE}" +3
MessageBox MB_OK|MB_ICONEXCLAMATION `${APPEXE} was not found in $EXEDIR\${APPDIR}`
Abort
FunctionEnd
на
Function CheckDirTxt
IfFileExists "$EXEDIR\Readme.txt" +3
MessageBox MB_OK|MB_ICONEXCLAMATION `Файл Readme.txt был удалён. Запуск не возможен!`
Abort
FunctionEnd
Заработало как и хотел.
AlekseyPopovv
11-06-2022, 19:24
Function CheckDirTxt »
Рекомендую функцию .onInit
Цитата: "Функция .onInit выполняется после инициализации инсталлятора. Это самая первая функция, которая выполняется при запуске вашего инсталлятора."
Не понятно зачем нужно создание файла "Readme.txt" при компиляции...
Может нужно при запуске "портативной версии" создать файл "Readme.txt"?
Не могу понять...
Может нужно при запуске "портативной версии" создать файл "Readme.txt"?
Вот именно, изначальный вопрос и заключался в этом. Есть текстовый файл лаунчер запускает программу, нет программа не зпускается.
"Readme.txt" название образное.
Не понятно зачем нужно создание файла "Readme.txt" при компиляции...
Под словом компиляция имелось ввиду сборка портативной программы
AlekseyPopovv
11-06-2022, 20:25
ZVSRus, Ну тут вообще просто.
Как уже и писал "iglezz", только подробнее...
Создаём переменную, что бы при смене имени файла не искать её по всему скрипту.
+3 значит если файл есть, то переходим на три строки вниз, то есть "IfFileExists "$EXEDIR\${README}" +3 0" это первая строка.
0 значит файла нет и переходит на следующую строку.
!define README "Readme.txt"
Function .onInit
IfFileExists "$EXEDIR\${README}" +3 0
MessageBox MB_OK|MB_ICONSTOP 'Файл ${README} был удалён. Запуск не возможен!'
Quit
FunctionEnd
AlekseyPopovv,
Думаю что вы поняли для чего вся эта возня.
Пример работает прекрасно. Благодарен!
AlekseyPopovv
13-06-2022, 10:54
Как в макросе проверить есть ли переменная?
Сам скрипт:
!define APPEXE86 "Prog86.exe"
!define APPEXE64 "Prog64.exe"
!include "macros.nsh"
Макрос:
!define CacheAppExeJump "!insertmacro DeleteCacheAppExeJump"
!define APPEXEJUMP1 "$EXEDIR\${APPDIR}\${APPEXE}"
!macro DeleteCacheAppExeJump AppExeJump
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Search\JumplistData" "${AppExeJump}"
!macroend
!define CacheAppExe86Jump "!insertmacro DeleteCacheAppExe86Jump"
!define APPEXE86JUMP1 "$EXEDIR\${APPDIR}\${APPEXE86}"
!macro DeleteCacheAppExe86Jump AppExe86Jump
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Search\JumplistData" "${AppExe86Jump}"
!macroend
!define CacheAppExe64Jump "!insertmacro DeleteCacheAppExe64Jump"
!define APPEXE64JUMP1 "$EXEDIR\${APPDIR}\${APPEXE64}"
!macro DeleteCacheAppExe64Jump AppExe64Jump
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Search\JumplistData" "${AppExe64Jump}"
!macroend
Если нет
!define APPEXE "Prog.exe"
то переходит на поиск
!define APPEXE86 "Prog86.exe"
AlekseyPopovv,
команды !ifdef или !ifndef
AlekseyPopovv
24-08-2022, 15:48
Как задать переменную для папки LocalLow?
Как задать переменную для папки LocalLow? »
Объявить константу (в соответствии WinCore.nsh и KNOWNFOLDERID (https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid)):
!define FOLDERID_LocalAppDataLow {A520A1A4-1780-4FF6-BD18-167343C5AF16}
В секции/функции получить значение инструкцией GetKnownFolderPath:
GetKnownFolderPath $0 ${FOLDERID_LocalAppDataLow}
Lou Paloma
28-08-2022, 23:10
Всем Привет!Этот установщик использует temp?нужна установка программы с запуском в конце скрипта или exe из конечной папки назначения(не из temp),конечный путь заранее не определён вообще без использования temp желательно(распаковкой туда,а потом копированием в конечный пункт)
Sfx конструкторы такого не могут.
Lou Paloma,
Этот установщик использует %temp% для распаковки плагинов, графики и прочих временных файлов установщика.
Остальное по желанию скриптописателя.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.