.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 27
Аватара пользователя
динозавра

Re: .: NSIS - все вопросы :. часть 2.

Сообщение динозавра »

Цитата ZVSRus:



Function CheckDirTxt
.: NSIS - все вопросы :. часть 2.




Рекомендую функцию .onInit

Цитата: "Функция .onInit выполняется после инициализации инсталлятора. Это самая первая функция, которая выполняется при запуске вашего инсталлятора."

Не понятно зачем нужно создание файла "Readme.txt" при компиляции...

Может нужно при запуске "портативной версии" создать файл "Readme.txt"?

Не могу понять...
Аватара пользователя
динозавра

Re: .: NSIS - все вопросы :. часть 2.

Сообщение динозавра »

динозавра, Ну это же в документации есть:
Цитата:



nsisXML::select

find the first node matching the given XPath expression and return its

reference in $1 and $2

if not found, reference will be 0



Если select вернёт 0 в вышеуказанных регистрах, то искомого выражения в файле нет и следующий за select`ом parentNode вызовет сбой.
Аватара пользователя
динозавра

Re: .: NSIS - все вопросы :. часть 2.

Сообщение динозавра »

iglezz,

Спасибо.

Все понятно.

Работает.
Аватара пользователя
динозавра

Re: .: NSIS - все вопросы :. часть 2.

Сообщение динозавра »

Всем доброго вечера. Опять нуждаюсь в помощи. Такая ситуация. На компе две или более учёток. Одна админ, остальные челядь. Установщик работает из под админа и устанавливает много чего в разные папки, реестр, драйвера. Но нужно установить обязательно всем пользователям папки с файлом по такому пути SetShellVarContext current $APPDATA\Папка\файл или $LOCALAPPDATA\Папка\файл. На всех компах учетки с разными именами. Абсолютный путь не катит. При такой прописке переменных, как я показал, кто бы не устанавливал, а достается одному админу. Остальным никак. Как это можно прописать, чтобы и остальным устанавливались папки?
Аватара пользователя
iglezz

Re: .: NSIS - все вопросы :. часть 2.

Сообщение iglezz »

динозавра,

Пример обхода учёток на локальном компе -
EnumUsersRegEx.nsh
+
Example
.
Аватара пользователя
динозавра

Re: .: NSIS - все вопросы :. часть 2.

Сообщение динозавра »

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
Аватара пользователя
Kopejkin

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Kopejkin »

Приветствую! Пожалуйста, помогите разобраться, где косяк. Пытаюсь использовать плагин
WPatch
. Пример отлично отрабатывает изменение файлов, а мой сценарий - нет. Никаких ошибок. В общем, застрял я и не могу понять, в чем причина.

Пример

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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
Аватара пользователя
iglezz

Re: .: NSIS - все вопросы :. часть 2.

Сообщение iglezz »

Цитата AlekseyPopovv:



Как задать переменную для папки LocalLow?
.: NSIS - все вопросы :. часть 2.




Объявить константу (в соответствии WinCore.nsh и
KNOWNFOLDERID
):



Код:

Код: Выделить всё

!define FOLDERID_LocalAppDataLow {A520A1A4-1780-4FF6-BD18-167343C5AF16}

В секции/функции получить значение инструкцией GetKnownFolderPath:



Код:

Код: Выделить всё

GetKnownFolderPath $0 ${FOLDERID_LocalAppDataLow}
Аватара пользователя
Kopejkin

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Kopejkin »

Не вызывал, потому как и пример и мой сценарий работают с одним и тем же файлом WGenPatDir.nsh. Да и не знаю, что может в нем вызывать сомнения. Он создается автоматически при создании файла различий.

Если нужен:



WGenPatDir.nsh

[spoiler]Код:
[/spoiler]

Код: Выделить всё

!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
Аватара пользователя
iglezz

Re: .: NSIS - все вопросы :. часть 2.

Сообщение iglezz »

Kopejkin, Не имея набора файлов (оба каталога для WGenPatDir.exe и каталог с файлами установленной программы), достаточного для сборки скрипта и теста результата, трудно сказать определённо.

Проблема только с пропатчиванием или также с секциями -Backup и -Main? Во втором случае стоит внимательно посмотреть на функцию CheckFile, она несколько путано написана.

Можно поискать проблемное место методом отключения ненужных для проверки частей скрипта и выводом отладочной информации через DetailPrint или в файл через FileWrite.



ЗЫ

Блок

Код:

Код: Выделить всё

Section
      InitPluginsDir
 SectionEnd

можно удалить, т.к. InitPluginsDir уже исполняется в .onInit
Ответить

Вернуться в «Автоматическая установка приложений»