|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Пользователь Сообщения: 93
|
Профиль | Отправить PM | Цитировать динозавра,
Это можно сделать с помощью макроса от kotkovets. !include "MUI2.nsh" !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "Russian" ShowInstDetails show OutFile GetUserSID.exe Caption "GetUserSID" !define GetUserSID "!insertmacro CallGetUserSID" !macro CallGetUserSID USERNAME SID System::Store S StrCpy '$0' '${USERNAME}' StrCmp '$0' '' 0 +2 ExpandEnvStrings '$0' "%USERNAME%" System::Call "*(&t1024)i.r1" System::Call "advapi32::LookupAccountName(tn,tr0,ir1,*i1024,tn,*i1024,*in)i.r0" IntCmp $0 1 0 +2 +2 System::Call "advapi32::ConvertSidToStringSid(ir1,*t.s)" IntCmp $0 1 +2 0 0 Push error System::Free $1 System::Store L Pop "${SID}" !macroend !ifdef NSIS_UNICODE !define STR %s !else !define STR %S !endif Section System::Call "netapi32::NetQueryDisplayInformation(wn,i1,i0,i-1,i${NSIS_MAX_STRLEN},*i.R0,*i.R1)i.R4" ${If} $R4 = 0 ${For} $R4 1 $R0 System::Call "*$R1(i.R2,i.R3,i,w,i,i)" IntFmt '$R2' ${STR} $R2 IntFmt '$R3' ${STR} $R3 ${GetUserSID} '$R2' '$R5' IntOp $R1 $R1 + 24 SetOutPath "C:\Users\$R2\AppData\Roaming\test" File "test.txt" ${Next} System::Call "netapi32::NetApiBufferFree(iR1)" ${EndIf} SectionEnd Будет установлено всем найденным пользователям и активным и не активированным. Незадача в том, что в директории "Пользователи" могут появятся папки не активированных пользователей таких, как "Гость", "Администратор". Как привинтить сюда фильтр, чтобы не устанавливалось не активированным пользователям понятия не имею. |
Отправлено: 02:48, 08-02-2022 | #2611 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать iglezz,
Спасибо, но там без чекушки ничего не понятно, а после чекушки вообще. inco1, Это правильно работает, но на семерке в папку SetShellVarContext current $APPDATA добавились 2 профиля встроенных пользователей Гость и Администратор. А на одиннадцатой к ним присоединились интернетовский и еще какой то. Все эти учетки не активны. Не могу прикрутить логику, чтобы их отсеять. Может знатоки помогут в этом деле. Пробовал вот так, но не отсеиваются. Видимо нужен подход не моего уровня. !include "MUI2.nsh" !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "Russian" ShowInstDetails show OutFile GetUserSID.exe Caption "GetUserSID" !define GetUserSID "!insertmacro CallGetUserSID" !macro CallGetUserSID USERNAME SID System::Store S StrCpy '$0' '${USERNAME}' StrCmp '$0' '' 0 +2 ExpandEnvStrings '$0' "%USERNAME%" System::Call "*(&t1024)i.r1" System::Call "advapi32::LookupAccountName(tn,tr0,ir1,*i1024,tn,*i1024,*in)i.r0" IntCmp $0 1 0 +2 +2 System::Call "advapi32::ConvertSidToStringSid(ir1,*t.s)" IntCmp $0 1 +2 0 0 Push error System::Free $1 System::Store L Pop "${SID}" !macroend !ifdef NSIS_UNICODE !define STR %s !else !define STR %S !endif Section System::Call "netapi32::NetQueryDisplayInformation(wn,i1,i0,i-1,i${NSIS_MAX_STRLEN},*i.R0,*i.R1)i.R4" ${If} $R4 = 0 ${For} $R4 1 $R0 System::Call "*$R1(i.R2,i.R3,i,w,i,i)" IntFmt '$R2' ${STR} $R2 IntFmt '$R3' ${STR} $R3 ${GetUserSID} '$R2' '$R5' IntOp $R1 $R1 + 24 StrCpy $R6 "$R2" StrCpy $R7 "C:\Users\$R6" StrCmp $R7 0 Not SetOutPath "C:\Users\$R2\AppData\Roaming\test" File "test.txt" Not: ${Next} System::Call "netapi32::NetApiBufferFree(iR1)" ${EndIf} SectionEnd |
Отправлено: 13:02, 08-02-2022 | #2612 |
Пользователь Сообщения: 112
|
Профиль | Сайт | Отправить PM | Цитировать Приветствую! Пожалуйста, помогите разобраться, где косяк. Пытаюсь использовать плагин WPatch. Пример отлично отрабатывает изменение файлов, а мой сценарий - нет. Никаких ошибок. В общем, застрял я и не могу понять, в чем причина.
Пример
Name "Sample WPatch" OutFile Sample.exe ShowInstDetails show InstallDir "$PROGRAMFILES\MOBILedit Enterprise" Page directory Page instfiles Section "-Backup" SetOutPath $INSTDIR CreateDirectory "$INSTDIR\Backup" CopyFiles /SILENT $INSTDIR\Czech $INSTDIR\Backup 22000 Sleep 500 SectionEnd Section InitPluginsDir SectionEnd !include WGenPatDir.nsh Section IfErrors 0 +2 MessageBox MB_OK "There has been some errors !" SectionEnd |
Последний раз редактировалось Kopejkin, 19-02-2022 в 21:14. Причина: Замена тегов PHP на CODE Отправлено: 14:53, 14-02-2022 | #2613 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Kopejkin,
Самое важное находится в WGenPatDir.nsh. Его содержимое вопросов не вызывает? |
Отправлено: 16:09, 14-02-2022 | #2614 |
Пользователь Сообщения: 112
|
Профиль | Сайт | Отправить PM | Цитировать Не вызывал, потому как и пример и мой сценарий работают с одним и тем же файлом WGenPatDir.nsh. Да и не знаю, что может в нем вызывать сомнения. Он создается автоматически при создании файла различий.
Если нужен: WGenPatDir.nsh
!ifndef ADDEDSOURCE !define ADDEDSOURCE 'changes\' !endif Function Patch DetailPrint 'Patch: $0' StrCpy $0 '$INSTDIR\$0' retry: WPatch::PatchFile /NOUNLOAD ; expects $0:file path, $1:options, $2:patch path IntCmp $1 0 continue can_skip 0 SetErrors can_skip: SetDetailsPrint listonly DetailPrint '=> Error $1' SetDetailsPrint both IntCmp $1 1 0 continue continue MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION $(^FileError_NoIgnore) /SD IDCANCEL IDRETRY retry Abort continue: FunctionEnd Section 'ApplyPatch' ClearErrors SetOutPath '$PLUGINSDIR' File WGenPatDir.pat StrCpy $2 '$PLUGINSDIR\WGenPatDir.pat' DetailPrint 'Checking before patch...' StrCpy $0 'Czech\AppRoot.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 12' Call Patch StrCpy $0 'Czech\Archive.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 5915' Call Patch StrCpy $0 'Czech\Backup.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 7380' Call Patch StrCpy $0 'Czech\DataSource.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 9288' Call Patch StrCpy $0 'Czech\Error.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 10335' Call Patch StrCpy $0 'Czech\Exports.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 11501' Call Patch StrCpy $0 'Czech\FormatGUI.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 19057' Call Patch StrCpy $0 'Czech\Internet.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 36154' Call Patch StrCpy $0 'Czech\ItunesBackup.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 39281' Call Patch StrCpy $0 'Czech\Main.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 41655' Call Patch StrCpy $0 'Czech\mewconad.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 957752' Call Patch StrCpy $0 'Czech\mewconad.xml' ; Check modified file StrCpy $1 '/CHECK /PRECISE 961083' Call Patch StrCpy $0 'Czech\mewconap.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 963777' Call Patch StrCpy $0 'Czech\mewconap.xml' ; Check modified file StrCpy $1 '/CHECK /PRECISE 966308' Call Patch StrCpy $0 'Czech\mewconts.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 968220' Call Patch StrCpy $0 'Czech\mewconts.xml' ; Check modified file StrCpy $1 '/CHECK /PRECISE 970789' Call Patch StrCpy $0 'Czech\NewsTemplate.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 972759' Call Patch StrCpy $0 'Czech\Offline.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 973148' Call Patch StrCpy $0 'Czech\Online.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 975493' Call Patch StrCpy $0 'Czech\Outlook.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 978946' Call Patch StrCpy $0 'Czech\PlugBook.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 979935' Call Patch StrCpy $0 'Czech\PlugCopy.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1023434' Call Patch StrCpy $0 'Czech\PlugData.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1063175' Call Patch StrCpy $0 'Czech\PlugEmail.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1137068' Call Patch StrCpy $0 'Czech\PlugFS.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1138337' Call Patch StrCpy $0 'Czech\PlugHex.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1169032' Call Patch StrCpy $0 'Czech\PlugNetworks.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1171900' Call Patch StrCpy $0 'Czech\PlugOrgan.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1172654' Call Patch StrCpy $0 'Czech\PlugPhoto.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1189998' Call Patch StrCpy $0 'Czech\PlugRing.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1205611' Call Patch StrCpy $0 'Czech\PlugSMS.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1232991' Call Patch StrCpy $0 'Czech\PlugTools.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1261257' Call Patch StrCpy $0 'Czech\PlugWipe.lang' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1264069' Call Patch StrCpy $0 'Czech\ReplugPort.htm' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1273139' Call Patch StrCpy $0 'Czech\rootinfo.dat' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1274227' Call Patch StrCpy $0 'Czech\ToolkitPro.Resource.dll' ; Check modified file StrCpy $1 '/CHECK /PRECISE 1277377' Call Patch IfErrors 0 +3 SetErrors Goto end_of_patch DetailPrint 'Beginning real patch...' StrCpy $0 'Czech\AppRoot.htm' ; Modified file StrCpy $1 '/PRECISE 12' Call Patch StrCpy $0 'Czech\Archive.htm' ; Modified file StrCpy $1 '/PRECISE 5915' Call Patch StrCpy $0 'Czech\Backup.htm' ; Modified file StrCpy $1 '/PRECISE 7380' Call Patch StrCpy $0 'Czech\DataSource.htm' ; Modified file StrCpy $1 '/PRECISE 9288' Call Patch StrCpy $0 'Czech\Error.htm' ; Modified file StrCpy $1 '/PRECISE 10335' Call Patch StrCpy $0 'Czech\Exports.lang' ; Modified file StrCpy $1 '/PRECISE 11501' Call Patch StrCpy $0 'Czech\FormatGUI.lang' ; Modified file StrCpy $1 '/PRECISE 19057' Call Patch StrCpy $0 'Czech\Internet.htm' ; Modified file StrCpy $1 '/PRECISE 36154' Call Patch StrCpy $0 'Czech\ItunesBackup.htm' ; Modified file StrCpy $1 '/PRECISE 39281' Call Patch StrCpy $0 'Czech\Main.lang' ; Modified file StrCpy $1 '/PRECISE 41655' Call Patch StrCpy $0 'Czech\mewconad.htm' ; Modified file StrCpy $1 '/PRECISE 957752' Call Patch StrCpy $0 'Czech\mewconad.xml' ; Modified file StrCpy $1 '/PRECISE 961083' Call Patch StrCpy $0 'Czech\mewconap.htm' ; Modified file StrCpy $1 '/PRECISE 963777' Call Patch StrCpy $0 'Czech\mewconap.xml' ; Modified file StrCpy $1 '/PRECISE 966308' Call Patch StrCpy $0 'Czech\mewconts.htm' ; Modified file StrCpy $1 '/PRECISE 968220' Call Patch StrCpy $0 'Czech\mewconts.xml' ; Modified file StrCpy $1 '/PRECISE 970789' Call Patch StrCpy $0 'Czech\NewsTemplate.htm' ; Modified file StrCpy $1 '/PRECISE 972759' Call Patch StrCpy $0 'Czech\Offline.htm' ; Modified file StrCpy $1 '/PRECISE 973148' Call Patch StrCpy $0 'Czech\Online.htm' ; Modified file StrCpy $1 '/PRECISE 975493' Call Patch StrCpy $0 'Czech\Outlook.htm' ; Modified file StrCpy $1 '/PRECISE 978946' Call Patch StrCpy $0 'Czech\PlugBook.lang' ; Modified file StrCpy $1 '/PRECISE 979935' Call Patch StrCpy $0 'Czech\PlugCopy.lang' ; Modified file StrCpy $1 '/PRECISE 1023434' Call Patch StrCpy $0 'Czech\PlugData.lang' ; Modified file StrCpy $1 '/PRECISE 1063175' Call Patch StrCpy $0 'Czech\PlugEmail.lang' ; Modified file StrCpy $1 '/PRECISE 1137068' Call Patch StrCpy $0 'Czech\PlugFS.lang' ; Modified file StrCpy $1 '/PRECISE 1138337' Call Patch StrCpy $0 'Czech\PlugHex.lang' ; Modified file StrCpy $1 '/PRECISE 1169032' Call Patch StrCpy $0 'Czech\PlugNetworks.lang' ; Modified file StrCpy $1 '/PRECISE 1171900' Call Patch StrCpy $0 'Czech\PlugOrgan.lang' ; Modified file StrCpy $1 '/PRECISE 1172654' Call Patch StrCpy $0 'Czech\PlugPhoto.lang' ; Modified file StrCpy $1 '/PRECISE 1189998' Call Patch StrCpy $0 'Czech\PlugRing.lang' ; Modified file StrCpy $1 '/PRECISE 1205611' Call Patch StrCpy $0 'Czech\PlugSMS.lang' ; Modified file StrCpy $1 '/PRECISE 1232991' Call Patch StrCpy $0 'Czech\PlugTools.lang' ; Modified file StrCpy $1 '/PRECISE 1261257' Call Patch StrCpy $0 'Czech\PlugWipe.lang' ; Modified file StrCpy $1 '/PRECISE 1264069' Call Patch StrCpy $0 'Czech\ReplugPort.htm' ; Modified file StrCpy $1 '/PRECISE 1273139' Call Patch StrCpy $0 'Czech\rootinfo.dat' ; Modified file StrCpy $1 '/PRECISE 1274227' Call Patch StrCpy $0 'Czech\ToolkitPro.Resource.dll' ; Modified file StrCpy $1 '/PRECISE 1277377' Call Patch end_of_patch: StrCpy $1 '/UNLOAD' WPatch::PatchFile Delete $2 ; Now you should check for IfErrors ... SectionEnd |
Отправлено: 17:58, 14-02-2022 | #2615 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Kopejkin, Не имея набора файлов (оба каталога для WGenPatDir.exe и каталог с файлами установленной программы), достаточного для сборки скрипта и теста результата, трудно сказать определённо.
Проблема только с пропатчиванием или также с секциями -Backup и -Main? Во втором случае стоит внимательно посмотреть на функцию CheckFile, она несколько путано написана. Можно поискать проблемное место методом отключения ненужных для проверки частей скрипта и выводом отладочной информации через DetailPrint или в файл через FileWrite. ЗЫ Блок можно удалить, т.к. InitPluginsDir уже исполняется в .onInit |
Отправлено: 19:21, 14-02-2022 | #2616 |
Пользователь Сообщения: 112
|
Профиль | Сайт | Отправить PM | Цитировать Запускается все из одной папки, и "пример" и "мой". В "моем" все работает (проверяется, меняется, копируется), кроме пропатчивания. Смотрел DetailPrint на оба варианта. В "примере" пишет:
"Extract: WGenPatDir.pat...100%" В "моем": "Extract: WGenPatDir.pat" Может файл не извлекается? Почему? От безысходности пытался посмотреть, извлекается ли этот файл во временную папку. Но не увидел ни в первом, ни во втором варианте. Даже пытался тупо скопировать его во временную папку до начала процесса пропатчивания. Не помогло. |
Отправлено: 19:53, 14-02-2022 | #2617 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Kopejkin, Небольшая модификация функции Patch в примере показала, что плагин ничерта не пропатчил
nsis 3.08, ansi/unicode, проверено на Win10 x64 21h2, Win7 x86 Тут к автору плагина стучаться надо, если это ещё возможно. Function Patch (modified)
Function Patch SetDetailsPrint listonly StrCpy $0 '$INSTDIR\$0' StrCpy $R1 $1 8 StrCmp $R1 '/PRECISE' 0 +4 DetailPrint 'f: $0' md5dll::GetMD5File "$0" Pop $R2 retry: WPatch::PatchFile /NOUNLOAD ; expects $0:file path, $1:options, $2:patch path StrCmp $R1 '/PRECISE' 0 +7 md5dll::GetMD5File "$0" Pop $R3 StrCmp $R2 $R3 +4 0 DetailPrint "MD5 original $R2" DetailPrint "MD5 patched $R3" DetailPrint " " IntCmp $1 0 continue can_skip 0 SetErrors can_skip: SetDetailsPrint listonly DetailPrint '=> Error $1' SetDetailsPrint both IntCmp $1 1 0 continue continue MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION $(^FileError_NoIgnore) /SD IDCANCEL IDRETRY retry Abort continue: SetDetailsPrint none FunctionEnd |
Отправлено: 22:32, 14-02-2022 | #2618 |
Пользователь Сообщения: 112
|
Профиль | Сайт | Отправить PM | Цитировать Спасибо, что заморочились. Для меня это сложновато. Накарябал кучу текста для штатного плагина VPatch. Все работает. Еще раз, спасибо!
|
Отправлено: 23:11, 14-02-2022 | #2619 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать Приветствую всех. Перелопатил всю справку, но не нашел переименования папки. Ткните носом, если это есть в нашей справке.
Нужно следующее: если по такому то пути найдена папка "Вася", то переименовать ее на "Вова". |
Отправлено: 19:03, 15-02-2022 | #2620 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|