Войти

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


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 [132] 133 134 135 136 137 138 139 140 141 142 143 144 145 146

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
динозавра, и то, и то сработает. Используйте на своё усмотрение.

ZVSRus
11-06-2022, 14:20
Как в NSIS создать текстовый документ.
А при удалении его, исполняемый файл не запускался, и выводил сообщение что удалён текстовый документ?

iglezz
11-06-2022, 14:26
ZVSRus,
Создание файлов - FileOpen/FileClose
Проверка на существование - IfFileExists
Примеры есть в справке

ZVSRus
11-06-2022, 14:49
iglezz
Может не внятно задал вопрос. Есть такой скрипт для создания портативной программы. При компиляции портативной версии нужно чтобы рядом с лаунчером создался пустой текстовый документ. В него ничего писаться не будет. При удалении данного документа лаунчер не запускался и выводил сообщение что текстовый документ удалён.

PS: В скриптах NSIS полный 0.

iglezz
11-06-2022, 15:49
В процессе компиляции файл можно создать командой !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 по объёму небольшой, за пару вечеров основы усвоить можно.

ZVSRus
11-06-2022, 17:12
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"?
Не могу понять...

ZVSRus
11-06-2022, 19:59
Может нужно при запуске "портативной версии" создать файл "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

ZVSRus
11-06-2022, 21:01
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"

iglezz
13-06-2022, 11:17
AlekseyPopovv,
команды !ifdef или !ifndef

AlekseyPopovv
24-08-2022, 15:48
Как задать переменную для папки LocalLow?

iglezz
24-08-2022, 16:26
Как задать переменную для папки 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 конструкторы такого не могут.

iglezz
29-08-2022, 17:20
Lou Paloma,
Этот установщик использует %temp% для распаковки плагинов, графики и прочих временных файлов установщика.
Остальное по желанию скриптописателя.




© OSzone.net 2001-2012