PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 [92] 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

kotkovets
11-09-2015, 08:47
Как реализовать функцию sharedfile в nsis »
смотрите пример Library.nsi NSIS в папке Examples.

Dodakaedr
12-09-2015, 19:43
смотрите пример Library.nsi NSIS в папке Examples. »
Почему не находит файл, хоть он и присутствует?!include "Library.nsh"
outfile regtest.exe
!define TestDLL "$EXEDIR\w.dll"
section main
!insertmacro InstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED "${TestDLL}" "${TestDLL}" "$EXEDIR"
sectionend
http://i65.fastpic.ru/big/2015/0912/b9/adddad77b709123e459b3fc4f76498b9.png

nfs911
13-09-2015, 15:12
Доброго времени суток) Начал изучать NSIS и вот вроде все просто но не работает...
а именно:

!include "RegistryFunc.nsh"
!include 'LogicLib.nsh'

${If} ${KeyExists} "HKEY_CURRENT_USER\SOFTWARE\7-Zip"
MessageBox MB_OK "Ключ есть!"
${Else}
MessageBox MB_OK "Ключа не существует!"
${EndIf}

Всегда срабатывает else несмотря на наличие ключа

Дико извиняюсь - невнимательность)))
библиотека полностью совместима только ANSI версией компилятора NSIS.

nfs911
13-09-2015, 18:47
Заметил косяк или особенность:
Есть ветка HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Skype
Такой нету HKEY_LOCAL_MACHINE\SOFTWARE\Skype
делаем ${If} ${KeyExists} "HKEY_LOCAL_MACHINE\SOFTWARE\Skype" пишет что есть
удаляем HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Skype
делаем ${If} ${KeyExists} "HKEY_LOCAL_MACHINE\SOFTWARE\Skype" пишет что нету
Отсюда получается сквозной поиск в раздел Wow6432Node
Вроде бы ничего...но если сделать ${SaveKeyANSI} "$EXEDIR\HKLM_skype.reg" "HKEY_LOCAL_MACHINE\SOFTWARE\skype"
то получим данные из HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Skype но путь будет в HKEY_LOCAL_MACHINE\SOFTWARE\Skype
тоесть применив мы получим новый ключ HKEY_LOCAL_MACHINE\SOFTWARE\Skype

Это нормально?Особенность API или косяк? Как проверить наличие используя RegistryFunc.nsh без сквозного поиска в Wow6432Node?
потому что если сделать в cmd: reg query HKLM\Software\Skype то получим "Ошибка: Не удается найти указанный раздел или параметр в реестре."

Надеюсь разъяснил понятно)))

Dodakaedr
13-09-2015, 20:27
Как заставить работать переменные $EXEDIR, $SYSDIR ? Если так указать то работает, но это не вариант.!include "Library.nsh"
outfile regtest.exe
!define TestDLL "C:\Users\Admin\Documents\w.dll"
section main
!insertmacro InstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED "${TestDLL}" "${TestDLL}" "$EXEDIR"
sectionend

nfs911
13-09-2015, 21:21
Dodakaedr, они только так и работают...
!define SOME_CONSTANT "SomeApp"
${SOME_CONSTANT}
ну или переменные
Создание переменной вне секций и функций (в начале вашего кода)
Var MyVariableName
Создание переменной в секции или в функции
Var /Global MyVariableName
Пример:
Function .onInit
Var /Global MyVariableName
StrCpy $MyVariableName "Значение переменной"
FunctionEnd
Взято из справки

Dodakaedr
14-09-2015, 16:51
nfs911, так тоже не работает.

P.S. Все разобрался.

Salmo
15-09-2015, 14:34
Уважаемые, как убить процесс в системе...Использовал ProcessFunc.nsh, - не справился( возвр.зн.-2) Процесс убивается Анвиром...

K.A.V.
16-09-2015, 11:59
как убить процесс в системе »
http://nsis.sourceforge.net/KillProcDLL_plug-in
http://nsis.sourceforge.net/KillProc_plug-in

Если WinAPI, то TerminateProcess (https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686714%28v=vs.85%29.aspx)

kotkovets
16-09-2015, 12:02
Использовал ProcessFunc.nsh, - не справился( возвр.зн.-2) »
процесс защищенный, требует особых привилегий., получите их и...всё.

Salmo
16-09-2015, 13:07
K.A.V., kotkovets, спасибо... Вопрос я задал потому, что на ХР, как я понимаю, нет особых заморочек с правами. Работаю под Администратором и все процессы, запущенные мной, разве не имеют равные права? Обратило на себя внимание именно то , что Анвир справляется с задачей, а скомпилированный в NSIS ехе_шник нет... А на памяти время и версия Анвира, который, также, не справлялся с этим процессом. Поэтому мне и показалось (смягчаю), что дело не в правах а в самой убивалке, что и породило мой вопрос. Можно ли считать, что все способы предложенные Вами имеют равные возможности, которые определяются только правами процесса или можно утверждать, что один способ эффективнее другого, при всех равных прочих условиях? Прошу не судить строго, - раньше, как-то, не возникала необходимость разбираться в этом вопросе... Еще раз, спасибо.

Попутно хочу спросить, как убрать из трея иконку убитого процесса, которая остается после убиения?

MKN
16-09-2015, 13:17
Salmo,
Попробуй
; RtlAdjustPrivilege - Включает или выключает привилегию у вызывающего потока или процесса.
System::Call ntdll::RtlAdjustPrivilege(i20,i1,i0,*i)
потом уже убивай процесс

Только есть процессы , которым начхать на классические привелегии и права (к примеру, если "хозяин процесса" - TrustedInstaller... )

K.A.V.
16-09-2015, 16:55
Попутно хочу спросить, как убрать из трея иконку убитого процесса, которая остается после убиения? »
!include "WinMessages.nsh"
StrCpy $1 0
FindWindow $0 "Shell_TrayWnd" ""
FindWindow $0 "TrayNotifyWnd" "" $0
FindWindow $0 "SysPager" "" $0
FindWindow $0 "ToolbarWindow32" "" $0
${While} $1 != 1920
SendMessage $0 ${WM_MOUSEMOVE} 0 $1
IntOp $1 $1 + 1
${EndWhile}

ZaxBoys66
19-09-2015, 15:22
NSIS is possible to play a stream url using bass.dll or other plugins?
I have some ideas for a customized program but I have lost a source of it can create.
Please help me.

MKN
19-09-2015, 15:57
ZaxBoys66,


!define BASS_LOC "$EXEDIR\bass.dll"
!define MP3 "$EXEDIR\demo.mp3"
!define BASS_SAMPLE_LOOP 4
OutFile "Bass_Test.exe"
Page instfiles

Section
FindWindow $0 "#32770" "" $HWNDPARENT
System::Call /NOUNLOAD '${BASS_LOC}::BASS_Init(i -1,i 44100,i 0,i r0,i n) b.r0'
System::Call /NOUNLOAD '${BASS_LOC}::BASS_Start() b.r0'
System::Call /NOUNLOAD '${BASS_LOC}::BASS_StreamCreateFile(b 0,t "${MP3}",i 0,i 0,i 0) i.r1'
System::Call /NOUNLOAD "${BASS_LOC}::BASS_ChannelFlags(i r1, i ${BASS_SAMPLE_LOOP}, i ${BASS_SAMPLE_LOOP}) i.R0"
System::Call /NOUNLOAD '${BASS_LOC}::BASS_ChannelPlay(i r1, b 0) i.R1'
SectionEnd

Function .onGUIEnd
System::Call /NOUNLOAD "${BASS_LOC}::BASS_StreamFree(i) v (r1)"
System::Call /NOUNLOAD "${BASS_LOC}::BASS_Stop() b () .r0"
FunctionEnd

IgorV70
21-09-2015, 15:13
Добрый день всем!
проблемка такая: при запуске инсталлятора собранного в NSIS на windows server 2008
вываливается сообщение от UAC(см.картинку)
почему ругань идет на непонятный Set...tmp? как это исправить
(если нажать дополнительно, то показывается путь к файлу инсталлятора)

http://forum.oszone.net/attachment.php?attachmentid=129305&stc=1&d=1442837123

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

MKN
22-09-2015, 13:38
ZaxBoys66,
Не все версии bass.dll нормально работают с NSIS ! Используй последние версии с http://www.un4seen.com/
(я тестировал 2.4.10 и 2.4.11 )

nfs911
23-09-2015, 13:04
Что я делаю не так?
файл test_lib.nsh

!include "x64.nsh"
!include "Logiclib.nsh"
;!macro test_x
${If} ${RunningX64}
MessageBox MB_OK "running on x64"
!define test_def1 1000
${else}
MessageBox MB_OK "running on x32"
!define test_def1 2000
${EndIf}
;!macroend
;!insertmacro test_x

С макро и без - не работает
Цель: В nsh файле присвоить к test_def1 разные значения в зависимости от разрядности
--------------------------------------------------------
Решение:

Section
${If} ${RunningX64}
MessageBox MB_OK "running on x64"
StrCpy $1 "1000"
${else}
MessageBox MB_OK "running on x32"
StrCpy $1 "2000"
${EndIf}
!define test_def1 $1
MessageBox MB_OK ${test_def1}
SectionEnd

kotkovets
24-09-2015, 11:29
Что я делаю не так? »
!define - это команды компилятора(восклицательный знак впереди), а не установщика во время установки.

Igor M
25-09-2015, 21:42
Добрый вечер, знатоки.

Столкнулся с необходимостью в деинсталляторе удалять только установленные инсталлером файлы, а не всю папку.
И, неожиданно, выяснил, что не кривого способа вроде как и нет...
Прочитал статью "Uninstall only installed files" на сайте разработчиков, попробовал и, понял, что нормально это не работает:
К примеру, у меня копируется большое число файлов командой типа
File /r "..\out\files"
А в приведённом рецепте в файл uninstall.log в этом случае пишется не каждый файл по отдельности, а только папка.
Да притом и папка не удаляется при деинсталляции.

Неужели нет простого и лёгкого способа решить указанную проблему?

Спасибо.




© OSzone.net 2001-2012