Есть такой плагин
WPatch
Вместе с ним идет пример сценария.
Код:

; WPatch - Sample script
!system "rmdir /s /Q dir_to_patch"
!system "xcopy /E /Q /H dir1\* dir_to_patch\"
!ifdef TARGETDIR
!addplugindir "${TARGETDIR}"
!else
!addplugindir "..\..\bin"
!endif
Name "Sample WPatch"
OutFile Sample.exe
ShowInstDetails show
InstallDir $EXEDIR\dir_to_patch
Page directory
Page instfiles
Section
InitPluginsDir
SectionEnd
!include WGenPatDir.nsh
Section
IfErrors 0 +2
MessageBox MB_OK "There has been some errors !"
SectionEnd
Вопрос по выделенным красным строках (для общего развития)
В примере также имеются папки с файлами
dir1 и
dir2. Соответственно, первая - с исходными файлами и папками, вторая - с измененными.
После запуске батника создается файл отличий
*.pat и
WGenPatDir.nsh, который в дальнейшем будет использоваться для пропатчивания.
Если я правильно понял вторую строку, то содержимое папки
dir1 должно скопироваться в папку
dir_to_patch во время компиляции сценария?
Созданный патч
Sample.exe после запуска "натравливается" на содержимое этой папки
dir_to_patch.
В реальности, папка
dir_to_patch удаляется, а такая же, с исходным содержимым папки
dir1, не появляется. В чем прикол?
В русскоязычном Руководстве о параметрах команды !system написано не очень много и не совсем по-русски.
Практически же, я в
InstallDir прописываю путь к нужной мне (исходной) папке, содержимое которой дублируется в папке
dir1 для создания данных патча , а выделенные красным строки игнорирую, как комментарий.