.: NSIS - все вопросы :. часть 2.
-
Blok
Re: .: NSIS - все вопросы :. часть 2.
Спасибо, буду пытаться разобраться. Но сравнив код, который наваял я, и который показан в примере MKN, у меня возникает множество вопросов. Ясный перец с наскоку здесь не разберешься, особенно если в программировании полный ноль. Справку к плагину System я смотрел, но через переводчик гугл. Только понял, что для передачи в функции целых значений надо использовать литеру "i", для строки - "t", а если это логическое значение, то тогда как? Потом очень неясный вопрос с параметром HWND. Откуда его брать? В общем пока тупик. Понимаете, не хотелось бы тупо копировать часть кода, т.к. нет маневра. Изменяешь условия примера и ничего не работает. Ладно, не буду вас отвлекать.
-
Blok
Re: .: NSIS - все вопросы :. часть 2.
Цитата Vincent7:
Читал. Пробовал. Не получается
Покажите, как вы пробовали и что у вас не получается, год назад об этом уже говорилось (мы помогаем, а не делаем за вас, но с вами отдельный случай, всё делали за вас...). Мне просто интересно, как может не получиться то, что за вас уже написано (примеры в архиве плагина), вам остаётся только подставить свой путь к приложению.
Я вот сейчас опять же за вас взял, открыл пример скрипта их архива с плагином, подставил путь к консольному приложению и у меня всё считалось. Почему?
Цитата Vincent7:
Как скажите мне, отправлять что то окну если при использовании execdos это окно не создается?
И об этом я вам писал 10 страниц текста, и год назад мы уже выяснили, что вы сами походу понять не можете, что вам нужно в итоге, какой функционал. И пример отправки нажатия клавиши в консольное приложение год назад вам давали, между прочим.
Вы хотите, чтобы я сейчас опять за вас начал прочитывать сообщения годичной давности в этой теме и начал повторять их содержимое?
Цитата Vincent7:
Вместо сарказма могли бы помочь..
Помочь, ключевое слово, а не сделать за вас.
Всё-таки придётся сделать за вас. Данный пример кода создаёт текстовый документ в папке с выходным файлом, в котором будет результат исполнения команды help.exe, которая находится в системной директории.
Скрытый текст
[spoiler]Код: [/spoiler]
Читал. Пробовал. Не получается
.: 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.
K.A.V., Спасибо за код, но ведь я же писал что в первую очередь нужно отправить enter выполняемому приложению, а используя execdos этого не сделаешь. Разве я не прав?
-
Blok
Re: .: NSIS - все вопросы :. часть 2.
Цитата Vincent7:
нужно отправить enter выполняемому приложению, а используя execdos этого не сделаешь
А с помощью ExecCmd сделаешь? Причем здесь эти плагины и отправка сообщений окну?
Плагины ExecCmd и ExecDos используются для создания процесса с скрытым окном приложения. Всё. Это основной функционал.
С чего вы взяли вообще, что именно с помощью ExecCmd/ExecDos можно отправлять сообщения окну?
Ещё раз повторюсь, что пример отправки нажатия Enter в консольное приложение вам давали год назад, разве я не прав?
Со стороны это выглядит довольно глупо, начинать обсуждать год спустя то, что уже обсуждали. Вы память потеряли? Или просто опять лень теперь уже прочитать всё то, что уже написано год назад в этой теме?
нужно отправить enter выполняемому приложению, а используя execdos этого не сделаешь
.: NSIS - все вопросы :. часть 2.
А с помощью ExecCmd сделаешь? Причем здесь эти плагины и отправка сообщений окну?
Плагины ExecCmd и ExecDos используются для создания процесса с скрытым окном приложения. Всё. Это основной функционал.
С чего вы взяли вообще, что именно с помощью ExecCmd/ExecDos можно отправлять сообщения окну?
Ещё раз повторюсь, что пример отправки нажатия Enter в консольное приложение вам давали год назад, разве я не прав?
Со стороны это выглядит довольно глупо, начинать обсуждать год спустя то, что уже обсуждали. Вы память потеряли? Или просто опять лень теперь уже прочитать всё то, что уже написано год назад в этой теме?
-
K.A.V.
Re: .: NSIS - все вопросы :. часть 2.
K.A.V., с помощью execcmd да, можно. А с чего вы взяли что я с чего-то взял что можно отправлять именно с помощью плагинов? Можно и подругому. Хорошо, спрошу иначе- можно ли без использования плагинов отправлять лог из выполняемого консольного приложения в nsis функцию?
-
MKN
Re: .: NSIS - все вопросы :. часть 2.
Цитата Kopejkin:
В общем, не знаю, как правильно пояснить.
Может маленькое видео поможет.
Да, лажа на видео... Но у меня на восьмёрке вроде как всё нормально происходит. Если можно назвать нормальным, явную задержку при перерисовке стола...
Я пробовал разные утилитки, предназначенные специально для рестарта - всё в целом одно и то же - тормоза и визуально ужасно...
Например, : 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.
RightClick Restart Explorer
Кстати, лучше всех отрабатывает батник, вообщем такой же что я уже тебе давал + организована пинг-задержка :
Цитата:
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 предоставляет пользователям и администраторам возможность оперативно заменять файлы, которые в данный момент используются операционной системой.
Цитата:
Программы PendMoves (версия 1.2) и MoveFile (версия 1.01)
Автор: Марк Руссинович (Mark Russinovich)
В общем, не знаю, как правильно пояснить.
Может маленькое видео поможет.
.: 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, большое спасибо за то, что провели исследование данной проблемы и поделились результатами. Ваши рекомендации попробую применить для своих целей.
-
kotkovets
Re: .: NSIS - все вопросы :. часть 2.
Цитата Vincent7:
можно ли без использования плагинов отправлять лог из выполняемого консольного приложения в nsis функцию?
Вроде как давно известно - используй операторы перенаправления консольных команд в файл (назови, лог файл или как угодно), а потом обрабатывай этот файл скриптом NSIS...
Конечно возможны нюансы и частные случаи, но ты ведь до сих пор ничего конкретного не сказал (какое консольное приложение запускаешь, что именно из него хочешь обработать и т.д. )...
можно ли без использования плагинов отправлять лог из выполняемого консольного приложения в 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 , вообще-то называл год назад
обработать надо все что в лог выводит приложение... большое спасибо за ссылки! Теперь пойду читать примеры по работе с текстом в nsis
обработать надо все что в лог выводит приложение... большое спасибо за ссылки! Теперь пойду читать примеры по работе с текстом в nsis-
kotkovets
Re: .: NSIS - все вопросы :. часть 2.
Адаптировал
---
как пользоваться читаем внимательно в справочнике по NSIS (ссылка на справочник в шапке темы)
ProcessFunc.nsh
под 3 версию NSIS---
как пользоваться читаем внимательно в справочнике по NSIS (ссылка на справочник в шапке темы)