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

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

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

Сообщение Blok »

Спасибо, буду пытаться разобраться. Но сравнив код, который наваял я, и который показан в примере MKN, у меня возникает множество вопросов. Ясный перец с наскоку здесь не разберешься, особенно если в программировании полный ноль. Справку к плагину System я смотрел, но через переводчик гугл. Только понял, что для передачи в функции целых значений надо использовать литеру "i", для строки - "t", а если это логическое значение, то тогда как? Потом очень неясный вопрос с параметром HWND. Откуда его брать? В общем пока тупик. Понимаете, не хотелось бы тупо копировать часть кода, т.к. нет маневра. Изменяешь условия примера и ничего не работает. Ладно, не буду вас отвлекать.
Аватара пользователя
Blok

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

Сообщение Blok »

Цитата Vincent7:



Читал. Пробовал. Не получается
.: NSIS - все вопросы :. часть 2.




Покажите, как вы пробовали и что у вас не получается, год назад об этом уже говорилось (мы помогаем, а не делаем за вас, но с вами отдельный случай, всё делали за вас...). Мне просто интересно, как может не получиться то, что за вас уже написано (примеры в архиве плагина), вам остаётся только подставить свой путь к приложению.

Я вот сейчас опять же за вас взял, открыл пример скрипта их архива с плагином, подставил путь к консольному приложению и у меня всё считалось. Почему?




Цитата Vincent7:



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




И об этом я вам писал 10 страниц текста, и год назад мы уже выяснили, что вы сами походу понять не можете, что вам нужно в итоге, какой функционал. И пример отправки нажатия клавиши в консольное приложение год назад вам давали, между прочим.



Вы хотите, чтобы я сейчас опять за вас начал прочитывать сообщения годичной давности в этой теме и начал повторять их содержимое?




Цитата Vincent7:



Вместо сарказма могли бы помочь..
.: NSIS - все вопросы :. часть 2.




Помочь, ключевое слово, а не сделать за вас.



Всё-таки придётся сделать за вас. Данный пример кода создаёт текстовый документ в папке с выходным файлом, в котором будет результат исполнения команды help.exe, которая находится в системной директории.





Скрытый текст

[spoiler]Код:
[/spoiler]

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

Name "Test"
OutFile "TOFUNC_TEST.exe"
Function LogFunction
  Pop $2
FileWrite $R0 "$\r$\n$2"
FunctionEnd
Function .onInit
FileOpen $R0 "$EXEDIR\LOG.log" w
FileWrite $R0 "$\n"
    StrCpy $1 0
    GetFunctionAddress $0 LogFunction
    ExecDos::exec /NOUNLOAD /TOFUNC /TIMEOUT=5000 "$SYSDIR\help.exe" "" $0
    Pop $0
    ExecDos::wait $0
 FileClose $R0
 MessageBox MB_OK|MB_ICONINFORMATION "Готово"
 quit
FunctionEnd
Section
SectionEnd
Аватара пользователя
MKN

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

Сообщение MKN »

K.A.V., Спасибо за код, но ведь я же писал что в первую очередь нужно отправить enter выполняемому приложению, а используя execdos этого не сделаешь. Разве я не прав?
Аватара пользователя
Blok

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

Сообщение Blok »

Цитата Vincent7:



нужно отправить enter выполняемому приложению, а используя execdos этого не сделаешь
.: NSIS - все вопросы :. часть 2.




А с помощью ExecCmd сделаешь? Причем здесь эти плагины и отправка сообщений окну?

Плагины ExecCmd и ExecDos используются для создания процесса с скрытым окном приложения. Всё. Это основной функционал.



С чего вы взяли вообще, что именно с помощью ExecCmd/ExecDos можно отправлять сообщения окну?

Ещё раз повторюсь, что пример отправки нажатия Enter в консольное приложение вам давали год назад, разве я не прав?



Со стороны это выглядит довольно глупо, начинать обсуждать год спустя то, что уже обсуждали. Вы память потеряли? Или просто опять лень теперь уже прочитать всё то, что уже написано год назад в этой теме?
Аватара пользователя
K.A.V.

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

Сообщение K.A.V. »

K.A.V., с помощью execcmd да, можно. А с чего вы взяли что я с чего-то взял что можно отправлять именно с помощью плагинов? Можно и подругому. Хорошо, спрошу иначе- можно ли без использования плагинов отправлять лог из выполняемого консольного приложения в nsis функцию?
Аватара пользователя
MKN

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

Сообщение MKN »

Цитата Kopejkin:



В общем, не знаю, как правильно пояснить.

Может маленькое видео поможет.
.: NSIS - все вопросы :. часть 2.




Да, лажа на видео... Но у меня на восьмёрке вроде как всё нормально происходит. Если можно назвать нормальным, явную задержку при перерисовке стола...



Я пробовал разные утилитки, предназначенные специально для рестарта - всё в целом одно и то же - тормоза и визуально ужасно...



Например, : RestartExplorer ( Author Winaero )

Performs a graceful restart of the Explorer shell in Windows 10, 8, 7 and Vista. Explorer will save your preferences, i.e. icons order on Desktop and then restart.

http://winaero.com/download.php?view.1783




http://www.nirsoft.net/utils/restart_explorer.html




RightClick Restart Explorer
http://www.thewindowsclub.com/right-...o-context-menu




Кстати, лучше всех отрабатывает батник, вообщем такой же что я уже тебе давал + организована пинг-задержка :




Цитата:



echo off

mode 72,3

title Explorer Restart - v1.3

if exist TEMP_FILE goto erro_1

echo Security to not open two Explorer Restart>TEMP_FILE

taskkill /F /IM explorer.exe >NUL

echo Explorer Closed, Starting...

ping 127.0.0.1 >NUL

start %systemroot%\explorer.exe

del TEMP_FILE

echo Explorer restarts, wait few seconds for this window closes.

ping 127.0.0.1 >NUL

exit

:erro_1

echo Already have an Explorer Restart In Progress.

ping 127.0.0.1 >NUL

exit



На винампе предложили такой код :




Цитата:



!include LogicLib.nsh

!include WinMessages.nsh



Name RestartExplorer

OutFile RestartExplorer.exe

RequestExecutionLevel user

ShowInstDetails show



!macro _IsWindow _a _b _t _f

IsWindow `${_b}` `${_t}` `${_f}`

!macroend

!define IsWindow `"" IsWindow`



!macro RestartExplorer

Push $R0

Push $R1

FindWindow $R0 Shell_TrayWnd

${If} ${IsWindow} $R0

IntOp $R1 ${WM_USER} + 436

System::Call `user32::PostMessage(i R0, i R1, i 0, i 0)`

${For} $R1 1 20

Sleep 1000

FindWindow $R0 Shell_TrayWnd

${IfNot} ${IsWindow} $R0

Exec `"$WINDIR\explorer.exe"`

${Break}

${EndIf}

${Next}

${EndIf}

Pop $R1

Pop $R0

!macroend



Section Main

!insertmacro RestartExplorer

SectionEnd



Только всё это - один хрен... Тормоза и визуально не красиво...



(Про не отображение эксплорера плагином, автор пока ничего не сказал...)



Почитав разную инфу про установку-удаление занятых DLL без перезагрузки компа или эксплорера, я пришёл к выводу, что идея эта - очень плохая... Отбирать у Винды, удерживаемый ей файл - всё равно , что отбирать у ребёнка конфету. Крику и слёз не оберёшься... Изображение

Лучше отложенного удаления "занятых" файлов, после ближайшей перезагрузки, ничего не придумано... А если и придумано, то держится в великом секрете... Изображение



(есть ещё экзотика с манипуляцией помещения файлов в память и чего то там ещё, но это для крутых программеров..)



Ну и ещё используется вариант - подмена исходных файлов на нужные, с переименованием исходных . Это дело известное и похоже, самое эффективное...



Также можно использовать сторонние утилитки типа inuse.exe или MoveFile


Цитата:



Inuse.exe предоставляет пользователям и администраторам возможность оперативно заменять файлы, которые в данный момент используются операционной системой.

http://download.microsoft.com/downlo...N-US/inuse.exe





Цитата:



Программы PendMoves (версия 1.2) и MoveFile (версия 1.01)

Автор: Марк Руссинович (Mark Russinovich)



http://technet.microsoft.com/ru-ru/s.../bb897556.aspx
Аватара пользователя
MKN

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

Сообщение MKN »

MKN, большое спасибо за то, что провели исследование данной проблемы и поделились результатами. Ваши рекомендации попробую применить для своих целей.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата Vincent7:



можно ли без использования плагинов отправлять лог из выполняемого консольного приложения в nsis функцию?
.: NSIS - все вопросы :. часть 2.




Вроде как давно известно - используй операторы перенаправления консольных команд в файл (назови, лог файл или как угодно), а потом обрабатывай этот файл скриптом NSIS...

Конечно возможны нюансы и частные случаи, но ты ведь до сих пор ничего конкретного не сказал (какое консольное приложение запускаешь, что именно из него хочешь обработать и т.д. )...

http://www.windowsfaq.ru/content/view/260/57/


http://www.itroad.ru/standartnye-pot...oli-cmd-v-fajl


http://wiki.rosalab.ru/ru/index.php.htm/..._вывод_консоли
Аватара пользователя
MKN

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

Сообщение MKN »

MKN , вообще-то называл год назад Изображение обработать надо все что в лог выводит приложение... большое спасибо за ссылки! Теперь пойду читать примеры по работе с текстом в nsis
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Адаптировал
ProcessFunc.nsh
под 3 версию NSIS

---

как пользоваться читаем внимательно в справочнике по NSIS (ссылка на справочник в шапке темы)
Ответить

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