|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 | |
|