NSIS: Удалить каталог полностью с файлами и подкаталогами (RMDir)

Синтаксис:

RMDir [/r] [/REBOOTOK] directory_name

Удалить указанный каталог (полный путь без подстановочных знаков). Без /r каталог будет удален только в том случае, если он полностью пуст. Если указан параметр /r, каталог будет удален рекурсивно, поэтому будут удалены все каталоги и файлы в указанном каталоге. Если указан параметр /REBOOTOK, любой файл или каталог, которые не удалось удалить во время процесса, будут удалены при перезагрузке — если какой-либо файл или каталог будут удалены при перезагрузке, будет установлен флаг перезагрузки. Флаг ошибки устанавливается, если какой-либо файл или директория не могут быть удалены.

Пример:

RMDir $INSTDIR
RMDir $INSTDIR\data
RMDir /r /REBOOTOK $INSTDIR
RMDir /REBOOTOK $INSTDIR\DLLs

Обратите внимание, что текущий рабочий каталог (с экзешником) нельзя удалить. Текущий рабочий каталог устанавливается SetOutPath. Например, следующий пример не удалит каталог:

SetOutPath $TEMP\dir
RMDir $TEMP\dir

В следующем примере удастся удалить каталог:

SetOutPath $TEMP\dir
SetOutPath $TEMP
RMDir $TEMP\dir

Предупреждение: использование RMDir /r $INSTDIR в деинсталляторе небезопасно. Хотя это маловероятно, пользователь может выбрать установку непосредственно в папку Program Files, и поэтому эта команда сотрет всю папку Program Files, включая другие программы, которые не имеют ничего общего с установленной программой.

Доступны решения для более безопасного простого удаления только тех файлов, которые были установлены установщиком.

Перевод: Kolyan Maloy aka Dzhan for tolik-punkoff.com

Источник: NSIS Wiki

Project-T (Wolf in the Dark)

Поиграл ради разнообразия сегодня со старыми и новыми друзьями. Как обычно, ничего из этого по итогу не получится (один хрен, к песне надо сначала сочинять текст и драм), так, наиграл чуть-чуть.

Но пусть остается, один хрен, запись некопирайтная, кому вдруг приглянется, можно использовать без проблем. Хотя, лет 10 даже акустику в руки не брал, так что получилось немного похоже на Электропартизан. Ща вот и проверю, насерет Ютуб в запись или нет.

В общем, была картинка в голове, косяк, гитара и «черный песок Марса» (это коктейль такой). Так что если плагиат — только случайный.

Прямая ссылка

Набор шифровалок

— DES 100 — консольная утилита, реализующая алгоритм DES
— FC32 — алгоритмы перечислены на скриншоте

— FIGA201R — самописная шифровалка с самописным алгоритмом (криптостойкость не проверялась), описание формата файла и алгоритма в комплекте.
— WinCrypt — алгоритм LOKI

Скачать с Mega.NZ

Advancend Grapher

Преамбула

Мелкому другу срочно понадобилась программа, создающая графики по формулам, а Excel не подошел, бо до сих пор не умеет рисовать нормальные синусоиды, если задать интервал, например, от -10 до +10. Во всяком случае, препод сказал, что его графики из Excel не устраивают. А курсовая на носу у парня.

Слава Великим Древним и Ктулху лично, я компьютерный Плюшкин, и моего препода тоже не устраивали графики из Майкрософт Пуксель. Так что откопал такую вот программу.

Что умеет

+ Строить графики по формулам с нужным шагом и интервалом.
+ На одной координатной оси можно размещать несколько графиков
+ Импортировать результат в BMP/GIF
+ Дофига всякого-разного, что никогда не надо было, но вдруг кому-то понадобится (графики в полярных координатах, какие-то производные и прочий страшный матан). Мы электрики — нам красиво синусоиду нарисовать хватает (тьфу-тьфу-тьфу, как бы не сглазить).

Простейшее построение графика

Заходим в меню: Построение —> Добавить график

Попадаем в окошко построения:

Вбиваем формулу, выбираем основные параметры графика (цвет, толщина линии и т.д.).

Переключаемся на вкладку Доп. свойства:

Вбиваем диапазон и/или параметры построения (количество шагов, максимальный разрыв между значениями).

График можно отредактировать. Для этого нужно нажать F4 или перейти в меню Построение —> Список графиков:

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

Сохранение

Программа сохраняет данные в своем собственном бинарном формате. Не расковыривал его.

testgraph.agr

Экспорт

Программа может экспортировать изображение в формат BMP или GIF, а поскольку, внутри программа таки растровая, размер экспортируемого изображения может быть любой. Пример:

Скачать оригинальный BMP (1024×768)

На картинке представлена демонстрация возможностей. Три графика:

+ sin(x)^2 — красный
+ -sin(x)^2 — фиолетовый
+ (sin (x^2)^2)*10 — серый

Совместимость

Windows 98 SE — Windows 10 (Windows 11 не подтверждена)

Лицензия

Бесплатно для граждан ГОРФ. Для активации бесплатности нужно в установщике выбрать русский язык и подтвердить дополнение к лицензии. Не ломал, ибо само работает.

Скачать

Advancend Grapher 1.5 build 3 с MEGA.NZ (SFX ZIP Wrapper+Original Installer)

DIV с прокруткой

Все-таки пост от склероза.

Некоторые движки (LJ/LJR) такой код режут, но в самописном движке или WordPress должно работать.

Для чего

Чтобы текст, заключенный, например в теги <pre></pre> не порвал дизайн страницы, его можно положить в div с прокруткой.

Без div’а это будет выглядеть так:


[2] [3]

А с div’ом вот так

HTML-код

Если текст изначально размещается внутри div’а, заданного, например, шаблоном, то можно воспользоваться масштабированием с процентами:

<div style="max-width: 100%; max-height: 100%; overflow: auto;">

В других случаях размер можно задать пикселями:

<div style="max-width: 700px; max-height: 1000px; overflow: auto;">

NSIS: поиск и завершение (kill) внешнего процесса.

Делается с помощью плагина nsProcess.

Установка плагина

1. Качаем архив
2. Распаковываем содержимое архива по соответствующим каталогам NSIS

NsProcess.zip\Example --> C:\Program Files (x86)\NSIS\Examples\nsProcess
NsProcess.zip\Include --> C:\Program Files (x86)\NSIS\Include\
NsProcess.zip\Plugin\nsProcess.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-ansi\nsProcess.dll
NsProcess.zip\Plugin\nsProcessW.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-unicode\nsProcess.dll

Пример

Начало:

Unicode true
!include LogicLib.nsh

Name "KillProcessExample"
OutFile "KillProcessExample.exe"
ShowInstDetails show
RequestExecutionLevel User

Немного дополнил пример из официального мануала, вставив макрос для расширенного вывода сообщений об ошибках:

!macro PrintProcError ErrCode

Код разлапистый, потому на PasteBin: !macro PrintProcError ErrCode

Код внутри секции:

1. Запускаем тестовую программу (calc.exe, которая обычно есть в любой винде и лежит она обычно в $SYSDIR, т.е. в C:\Windows\System32\) и ждем 500 миллисекунд:

DetailPrint "Start calc.exe..."
Exec "$SYSDIR\calc.exe"
Sleep 500

2. Спрашиваем у пользователя, будем ли убивать процесс. Если нет — идем на завершение:

MessageBox MB_YESNO|MB_ICONQUESTION "Kill process calc.exe?" IDYES 0 IDNO "EndProg"

3. Ищем процесс(ы) по имени экзешника:

DetailPrint "Find process calc.exe..."
nsProcess::_FindProcess "calc.exe"

Да, можно хоть 10 калькуляторов назапускать.

4. Вытаскиваем из стека результат функции _FindProcess:

Pop $R0

5. Выводим на псевдоконсоль расшифровку кодов возврата:

!insertmacro PrintProcError $R0

6. Если код возврата = 0, значит, процесс найден, пытаемся его убить, выводим расшифровку кодов возврата, и опять подождем 500 миллисекунд:

${If} $R0 = 0
	DetailPrint "Process calc.exe found. Kill it..."
	nsProcess::_KillProcess "calc.exe"
	!insertmacro PrintProcError $R0
	Sleep 500
${EndIf}

Вывод на экран

Исходник примера

На GitHub

Источники

Официальная справка плагина (на буржуйском)
Перевод от Leha Silent (копия)

Тест div’а с прокруткой

Проценты:

После прочтения 126 заголовков, созданных генератором новостей, сбежавший из зоопарка кенгуру лишил гражданства, ограбил, изнасиловал, утопил, расстрелял, распял, сжег, сварил и съел председателя ЦИК В. Чурова 
Предвкушающий встречу с В.И. Новодворской патриарх Кирилл усыновил уличенного в педофилии главного государственного санитарного врача Г. Онищенко 
Внося законопроект о запрете пропаганды гомосексуализма среди пенсионеров, телеведущий Дмитрий Киселев унижал честь и достоинство своего телохранителя 
Вскоре после принятия иудаизма бендеровец Яценюк внес в Думу законопроект о запрете усыновления американцами внебрачных детей о. Всеволода Чаплина 
После празднования своего дня рождения в кафе "Четыре курицы" уссурийский тигр жег покрышки и поливал "коктейлем Молотова" министра обороны Шойгу 
Измученный острым приступом хронического бармазита покойный президент Венесуэлы Уго Чавес пообещал не в вводить войска в биолога Ричарда Докинза 
В городе на Неве в ходе празднования Дня пограничника бендеровец Тягнибок объявил народным мэром Пекина оппозиционера Алексея Навального 
Углубившись в чтение последнего послания В.В. Путина, Сильвио Берлускони бросил "коктейль Молотова" в окно директора ЦРУ Дэвида Петрэуса 
Выступая на заседании Совета безопасности ООН, пляшущий в голом виде Никита Джигурда продемонстрировал мировому сообществу трусы начальника СКП А. Бастрыкина 
После прочтения 126 заголовков, созданных генератором новостей, лидер Антимиайдана Залдостанов намекнул на отношения Ирины Родниной и своего брата

Пиксели:

После прочтения 126 заголовков, созданных генератором новостей, сбежавший из зоопарка кенгуру лишил гражданства, ограбил, изнасиловал, утопил, расстрелял, распял, сжег, сварил и съел председателя ЦИК В. Чурова 
Предвкушающий встречу с В.И. Новодворской патриарх Кирилл усыновил уличенного в педофилии главного государственного санитарного врача Г. Онищенко 
Внося законопроект о запрете пропаганды гомосексуализма среди пенсионеров, телеведущий Дмитрий Киселев унижал честь и достоинство своего телохранителя 
Вскоре после принятия иудаизма бендеровец Яценюк внес в Думу законопроект о запрете усыновления американцами внебрачных детей о. Всеволода Чаплина 
После празднования своего дня рождения в кафе "Четыре курицы" уссурийский тигр жег покрышки и поливал "коктейлем Молотова" министра обороны Шойгу 
Измученный острым приступом хронического бармазита покойный президент Венесуэлы Уго Чавес пообещал не в вводить войска в биолога Ричарда Докинза 
В городе на Неве в ходе празднования Дня пограничника бендеровец Тягнибок объявил народным мэром Пекина оппозиционера Алексея Навального 
Углубившись в чтение последнего послания В.В. Путина, Сильвио Берлускони бросил "коктейль Молотова" в окно директора ЦРУ Дэвида Петрэуса 
Выступая на заседании Совета безопасности ООН, пляшущий в голом виде Никита Джигурда продемонстрировал мировому сообществу трусы начальника СКП А. Бастрыкина 
После прочтения 126 заголовков, созданных генератором новостей, лидер Антимиайдана Залдостанов намекнул на отношения Ирины Родниной и своего брата

Плагин NsProcess

Ссылки

Версия 1.5:
nsProcess.zip (25 KB)

Версия 1.6 (поддержка NSIS UNICODE от brainsucker, переименуйте библиотеку nsProcessW.dll):
nsProcess.zip (14 KB)
— Зеркало: nsProcess_1_6.7z

Обсуждение:
На форуме

Описание

Возможности:

— Поиск процесса по имени.
— Завершение всех процессов с указанным именем (все найденные экземпляры).
— Закрытие всех процессов с указанным именем. Сначала происходит попытка закрыть все окна процессов, ожидание 3 секунд для завершения процессов. Если процесс(ы) все еще активны, используйте функцию _CloseProcess.
— Имя процесса нечувствительно к регистру
— Поддерживаемые ОС: Win95/98/ME/NT/2000/XP/Win7
— Поиск процессов других пользователей при запуске с правами администратора или при переключении на другого пользователя.
— Маленький размер плагина (4 Кб)
— Поддержка Unicode (просто переименуйте nsProcessW.dll в nsProcess.dll)

Пример использования

!include "LogicLib.nsh"
 
  Section ""
    StrCpy $1 "YOURAPP.exe"
 
    nsProcess::_FindProcess "$1"
    Pop $R0
    ${If} $R0 = 0
      nsProcess::_KillProcess "$1"
      Pop $R0
 
      Sleep 500
    ${EndIf}
 
  SectionEnd

Обычно _FindProcess возвращает:

0 если процесс найден
603 если процесс(ы) не найдены

// Коды возврата:
  // 0 = успех
  // 601 = Нет разрешения на завершение процесса
  // 602 = Не все процессы завершились успешно
  // 603 = Процесс в данный момент не запущен
  // 604 = Невозможно определить тип ОС
  // 605 = ОС не поддерживается
  // 606 = Невозможно загрузить NTDLL.DLL
  // 607 = Не удалось получить адрес процедуры из NTDLL.DLL
  // 608 = ошибка NtQuerySystemInformation
  // 609 = Невозможно загрузить KERNEL32.DLL
  // 610 = Не удалось получить адрес процедуры из KERNEL32.DLL
  // 611 = Ошибка CreateToolhelp32Snapshot

Благодарности

Ravi Kochhar (исходная функция FIND_PROC_BY_NAME на основе его кода)
iceman_k (Find Process By Name) и DITMan (KillProcDLL Manual).

Перевел Leha Silent специально для tolik-punkoff.com

Источник

Norton Secret Stuff v 1.00

Блин, нашел у друга на компе старую шифровалку файлов (судя по внутренней справке, алгоритм Blowfish)

Уж не знаю, там че за криптостойкость, но за уникальность стоит эту утилиту забэкапить.

— Адекватно работает только на Windows 3.1-3.11
— Генерирует самораскрывающиеся (SFX) шифрованные архивы, которые запускаются в DOS.
— Формат выходного экзешника MZ (DOS), так что выше Windows ME его будет нельзя открыть без эмулятора.

Скачать

Norton Secret Stuff v 1.00 с примером с MEGA.NZ

Патч на NSIS (с возможностью отмены).

Преамбула

На самом деле, многими реверсерскими командами создана куча генераторов автопатчеров, подсовываешь ему оригинальный и измененный экзешник, и тебе генерируется автопатчер, даже с красивой картинкой и восьмибитной музыкой. Но «есть проблема» (ц) Патриарх Кирилл:

— Не на все автопатчеры хорошо реагируют антивирусы
— Автопатчеры нестандартны, кто в лес, кто по дрова.

Неплохо бы сделать так, чтоб и антивирусы не ругались, и оно хоть как-то относительно стандартно выглядело. И такое решение есть — модуль VPatch для системы установки NSIS. Далее расскажу, как этим модулем воспользоваться, чтобы пропатчить уже установленную программу, а также, немного расширю пример, покажу как в патч «зашить» еще и отмену патча. Естественно, чтобы все повторить, у вас должен быть установлен NSIS хотя бы в минимальной комплектации.

Подготовка #1

Устанавливаем модуль VPatch, лучше воспользоваться ссылкой на установщик, потом скачать родной пример и попытаться его скомпилировать. Если все сработало — модуль установился правильно, можно работать дальше.

Для генерации данных для патча, VPatch использует свои утилиты командной строки, которые в комплекте идут, но устанавливаются криво, так что качаем утилиты отдельно и устанавливаем их (установятся в %WINDIR%).

Скачать установщик здесь

Подготовка #2

Теперь нужна лабораторная крыса, т.е. программа, которую будем патчить, возьмем оригинальный CrackMe из предыдущего примера (копия) и напишем ему стандартный инсталлятор:

Исходник инсталлятора
Готовый инсталлятор тестовой программы
Исходник CarckMe

Устанавливаем ее.

Для патча нужен оригинальный экзешник

И пропатченный вручную

Подробное описание патча

Проверка

Патч:

Восстановление:

Источники

VPatch — Free Patch Generator
VPatch plug-in
Документация и исходники оригинального примера
NSIS: контрольная сумма (MD5), сравнение файлов. (копия)
NSIS: Получение списка файлов с MD5-хешами. (копия)
NSIS: Получение даты и времени. (копия)

Исходник примера

Пример полностью на GitHub
Основной исходник

Фото с супом

Хотели фото с супом — нате вам!


Суп гороховый:
+ Картофель
+ Горох
+ Лук
+ Мясо
плюс хлеб
4 порции
+ водочка
+ доставка

600 рублей.

Закрыто все остальное, потому и дорого так.
Днем бы рублей в 200 обошлось бы.

NSIS: Получение даты и времени.

Преамбула

Иногда бывает нужно получить в скрипте установки локальную дату и время, или дату и время, связанную с файлом (модификации, создания или последнего доступа к файлу). В NSIS это делает одна стандартная функция, точнее, макрос ${GetTime}.

Подключаемые файлы и макрос

Для того, чтобы использовать GetTime, необходимо подключить заголовочный файл FileFunc.nsh (должен идти в стандартной поставке) и сам макрос GetTime:

!include "FileFunc.nsh"
!insertmacro GetTime

Вот начало инсталляционного скрипта:

Unicode true

!include "FileFunc.nsh"
!insertmacro GetTime

Name "GetLocalTime"
OutFile "GetLocalTime.exe"
ShowInstDetails show
RequestExecutionLevel User
;Далее будет тестовая секция

Синтаксис GetTime

${GetTime} "[File]" "[Option]" $var1 $var2 $var3 $var4 $var5 $var6 $var7

где:

"[File]" — файл (параметр игнорируется при использовании опций "L" или "LS")
"[Option]" — опции (см. далее)
$var1 — День
$var2 — Месяц
$var3 — Год
$var4 — День недели (наименование на английском языке)
$var5 — Час
$var6 — Минута
$var7 — Секунда

Опции:

L — локальное время компьютера
A — время последнего доступа к файлу
C — время создания файла
M — время последнего изменения файла
LS — системное время (то же самое, что и L, только используется часовой пояс UTC)
AS — время последнего доступа к файлу (UTC)
CS — время создания файла (UTC)
MS — время последнего изменения файла (UTC)

Пример получения локального времени

Section "Test"
	
     ; Получаем время компьютера
	${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
     ; Выводим его в окошко лога инсталлятора
	DetailPrint "Local date and time:"
	DetailPrint "$2/$1/$0 ($3) $4:$5:$6"
     ; Можно преобразовать время в строку
     ; чтоб добавить к имени файла
	DetailPrint "String to add time in filename:"
	StrCpy $0 "$2-$1-$0-$4-$5-$6"
     ; и вывести ее
	DetailPrint "$0"
	
SectionEnd

Результат

Ссылки

Пример на GitHub
how to get the date and time?
E.1.6 GetTime

Дурак подкидной

Разбирая жесткий диск клиента, нашел старую игрушку в дурака. Фришная, подвенду, не Flash.

Совместимость — Windows 95+(Windows 3.11 с поддержкой EXE PE-формата) — Windows 11

Реально, вечный экзешник. Установки не требует.
Произведено неким Усковым Иваном в 1997 году.

Скачать с Mega.NZ (ZIP, 131 Kb)

NSIS: Получение списка файлов с MD5-хешами.

Преамбула

Как-то показывал, как в NSIS получить MD5-хэши (копия), файлов в т.ч. Решил расширить пример, а как получить список файлов в каталоге и их MD5-хэши. Мне пригодится для следующего примера по NSIS, но и народ спрашивал, ибо в вышеуказанном примере нельзя выбрать произвольный файл, или сразу несколько. Исправляемся.

Поиск файлов на NSIS

Перед тем, как обработать какие-то файлы, надо их сначала найти и как-то передать в инсталлятор. В NSIS есть для этого несколько способов:

— Использовать стандартные функции FindFirst/FindNext, которые работают почти также, как соответствующие функции в WinAPI и требуют городить довольно неудобочитаемый цикл, постоянно проверять ошибки.
— Рекомендуемый разработчиками NSIS способ: использовать плагин Locate, работа с которым тоже отличается довольно неудобочитаемым кодом, и работает он в некоторых случаях не совсем стабильно.
— Функция Locate, которую вообще-то должен был заменить вышеуказанный плагин, но, как по мне, заменил ее криво. Ей проще воспользоваться, во всяком случае, для такой небольшой задачи. Далее будем работать именно с функцией Locate.

1. Создаем файл Locate.nsi в каталоге проекта, помещаем в него код функции, который можно взять их официальной Wiki NSIS. Раздел Function Code. (копия на PasteBin копия на GitHub)

2. Создаем основной файл (MD5List.nsi), формируем «болванку» проекта:

Unicode true
!include "Locate.nsi"

Name "MD5List"
OutFile "MD5List.exe"
ShowInstDetails show
RequestExecutionLevel User
InstallDir "$EXEDIR\"
DirText "Choose the folder to get list files and MD5 checksums."

Section "List"
SectionEnd

Не забываем подключить файл с кодом функции Locate (Locate.nsi): !include "Locate.nsi"

Синтаксис функции Locate

${Locate} "[Path]" "[Options]" "Function"

где:

"[Path]" — путь, стартовый каталог для поиска
"[Options]" — опции (см. далее)
"Function" — callback-функция (см. далее)

Опции функции Locate

/L=[FD|F|D|DE|FDE] — что искать:
/L=FD - Найти файлы и каталоги (по умолчанию)
/L=F - Найти только файлы
/L=D - Найти только каталоги
/L=DE - Найти только пустые каталоги
/L=FDE - Найти файлы и пустые каталоги

/M=[маска_файла].
По умолчанию /M=*.* (все файлы)
Можно изменить, например на /M=*.txt (текстовые файлы), и т.д.

/S=
Размер файла. Не буду заострять на этом внимание, синтаксис этой опции можно посмотреть оригинальной документации. По умолчанию размер файла игнорироуется.

/G=[1|0] — поиск с подкаталогами:
/G=1 — включить поиск с подкаталогами (включен по умолчанию)
/G=0 — поиск только в текущем каталоге

Пример вызова функции Locate

${Locate} "C:\SOMEDIR" "/L=F" "Userfunction"

Где мы указали каталог, с которого нужно начать поиск, указали хоть одну опцию, нужно указать хотя бы одну, и указали функцию обратного вызова, пока имя условное, но ниже объясню.

Callback-функция

Это пользовательская функция, которая должна получать данные от ${Locate}, а далее уж сама их обрабатывать.

${Locate} передает в функцию следующие стандартные переменные:

$R9 — полный путь к файлу
$R8 — путь без имени файла
$R7 — имя файла
$R6 — размер (для каталога $R6==0)

Остальные глобальные переменные можно использовать для своих целей внутри функции.

Внимание: callback-функция для ${Locate} обязательно должна заканчиваться командой push <переменная>.

Чтобы завершить функцию нормально, необходимо положить любое значение в стек:

push $0

Всегда помещайте что-либо в стек (даже если вы не собираетесь останавливать поиск), иначе произойдет непредвиденное!

Чтобы прервать поиск до того, как он завершится сам, в стек надо поместить значение StopLocate:

StrCpy $0 StopLocate
Push $0

Внимание! Внутри callback-функции почему-то не работает DetailPrint.

Теперь, зная все вышеозначенное, можно писать основной код.

Код внутри секции

Полученные данные будем писать во временный файл, раз уж DetailPrint нельзя воспользоваться. Получаем имя для временного файла и открываем его для записи:

GetTempFileName $R0
FileOpen $R1 $R0 w

Начинаем поиск:

DetailPrint "Starting search files and get MD5..."
${Locate} "$INSTDIR" "/L=F /M=*.*" "GetMD5"

$INSTDIR — каталог, который выберет пользователь при запуске примера.
"/L=F /M=*.*" - /L=F — ищем только файлы /M=*.* — все файлы.
"GetMD5" — имя callback-функции (см. ниже)

По окончанию поиска закрываем файл:

FileClose $R1

И проверяем, не случилось ли ошибок. Если случилось, выводим окно с надписью Error, если не случилось — открываем полученный файл в Блокноие:

IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
Exec '"notepad.exe" "$R0"'

Код секции целиком

Код callback-функции

После секции организуем пользовательскую функцию:

Function GetMD5
	; скармливаем MD5-плагину полное имя файла
	; про MD5-плагин написано по ссылке выше
	md5dll::GetMD5File "$R9"
	Pop $1 ; достаем из стека MD5
	; Записываем во временный файл (дескриптор в $R1)
	; имя найденного файла с путем: $R9
	; через табуляцию $\t MD5-хэш ($1)
	; и перевод строки $\r$\n
	FileWrite $R1 "$R9:$\t $1 $\r$\n"
	
	; завершаем функцию, помещая в стек
	; пустую переменную
	Push $0 
FunctionEnd

Проверка

Скормим программе ее же каталог.

В Блокноте откроется временный файл со следующим содержимым:

E:\Test\Locate.nsi:	      a8fb937f9509d7fc21f476b2ff59aaa3 
E:\Test\MD5List.exe:	 34edf2e42835380b7278e89315ec1a83 
E:\Test\MD5List.nsi:	 fb531c0dfa3bae4febe0b7cfbe7d4a88

Ссылки

NSIS: контрольная сумма (MD5), сравнение файлов. (копия)
Locate на NSIS Wiki
Пример на GitHub

Купил HIEW!

Не, ребята, это даже круче чем автограф БГ! С этой утилитой столько воспоминаний, а главное, иногда нужна по делу, хотя уже и реже, чем раньше.

Слава автору, что проект до сих пор существует, как и любимый примерно с того же детского возраста Far Manager, вот реально, счастья таким авторам! Проект если младше меня, то ненамного. А так да, еще в 12-15 лет пользовался его пиратской версией. Теперь купил лицензию (не дам).

Охрененный респект автору, лучший шестнадцатиричный редактор (с возможностью диззассемблера и редактирования кода напрямую), до сих пор лучший на этой планете.

И я его купил.

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

Официальный сайт: https://www.hiew.ru/

И инструкцию, как купить (чтобы поддержать автора, который уже больше 20 лет старается), можно там же найти.

Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/03/07/kupil-hiew/