Обсуждение программ nnCron и nnCron LITE
by SeMa » Tue, 08 Oct 2013, 14:59
nncron.exe v11.93.1172 beta13 tm.exe v 1.93b13 Build 599 18.03.2013 Windows XP (5.1.2600) SP3 Администратор. nncron — сервис. ini — "родной" кроновский. tab — пустой. Компилирую любую задачу, например: - Code: Select all
: main [NONAME TMSG: "Hello, WORLD!" 10 NONAME] MAINX ! S" my_test_task.exe" SAVE ;
или - Code: Select all
: my_test_task 0 S" D:\tools\test.exe" StartApp DROP ;
: main ['] my_test_task MAINX ! S" my_test_task.exe" SAVE ;
nncron -wp -runfile test_task.spf Всегда после успешного запуска скомпилированного EXE через несколько секунд крон выдает: Loading error: nncron.ini:10
где строка 10: Language: Englishв nncron.out: - Code: Select all
Log error # 6 Log error # 6 Log error # 6 EXCEPTION! CODE:C0000005 ADDRESS:4B2298 WORD:@ REGISTERS: 12ED68 94 1E 38 00 00 00 00 00 00 00 00 00 14 E5 90 7C ”.8..........еђ| 12ED78 70 EF 12 00 00 00 00 00 B8 FF 12 00 98 22 4B 00 pп......ёя.."K. 12ED88 1B 00 00 00 46 02 01 00 98 EF 12 00 23 00 00 00 ....F...п..#... USER DATA: 381E94 HANDLER: 12EFA4 RETURN STACK: 12EF98 : 4D7E4B Get 12EF9C : 271C <not found> 12EFA0 : 4B4E78 CATCH 12EFA4 : 12EFEC <not found>
Language: english ^ 0xC0000005L ACCESS_VIOLATION nncron.ini:10:
Комментирую строку 10. Далее после запуска EXE в nncron.out: - Code: Select all
Log error # 6 Log error # 6 Log error # 6 EXCEPTION! CODE:C0000005 ADDRESS:4B2298 WORD:@ REGISTERS: 12ED68 94 1E 38 00 00 00 00 00 00 00 00 00 14 E5 90 7C ”.8..........еђ| 12ED78 70 EF 12 00 00 00 00 00 B8 FF 12 00 98 22 4B 00 pп......ёя.."K. 12ED88 1B 00 00 00 46 02 01 00 98 EF 12 00 23 00 00 00 ....F...п..#... USER DATA: 381E94 HANDLER: 12EFA4 RETURN STACK: 12EF98 : 4D7E4B Get 12EF9C : 271C <not found> 12EFA0 : 4B4E78 CATCH 12EFA4 : 12EFEC <not found> "D:\tools\nn\my_test_task.exe" ^ 0xC0000005L ACCESS_VIOLATION
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by AlikasS » Wed, 09 Oct 2013, 01:41
nncron.exe v 1.93b13 Build 1172 18.03.2013 tm.exe v 1.93b13 Build 599 18.03.2013 Windows XP (5.1.2600) Service Pack 3 shell32.dll 6.0.2900
все хорошо. попробуй в запущенной консоли крона набрать - Code: Select all
: remain [NONAME TMSG: "Hello, WORLD!" 10 NONAME] MAINX ! S" my_test_task.exe" SAVE ; remain
и получившийся my_test_task.exe запустить или убрать ключ -wp
-

AlikasS
-
- Posts: 1453
- Joined: Wed, 28 Jun 2006, 05:39
- Location: Khabarovsk
by SeMa » Wed, 09 Oct 2013, 13:27
Да, уж!.. Заработало... Проблема в имени main или ?.. Ещё вопрос. Как запихнуть в скрипт авторизацию? Надо, чтобы EXE выполнялся от другого юзера без вызова через "Запуск от имени...". - Code: Select all
#( _my_test_task NoActive LoadProfile User: sms Password: **** Domain: WORK LogonInteractive Action: 0 S" D:\tools\test.exe" StartApp DROP )#
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by AlikasS » Thu, 10 Oct 2013, 03:47
делай так - Code: Select all
: main [NONAME TMSG: "Hello, WORLD!" 10 NONAME] TO <MAIN> \ MAINX ! S" my_test_task.exe" SAVE ;
странно ведь должен работать MAINX ! т.к. Слово SAVE ( a u -- ) сохраняет всю форт-систему, включая все словарные структуры (кроме временных!) в исполняемый модуль путь к которому задаётся строкой a u. Точка входа определяется value-переменной <MAIN> для консольного режима и переменной MAINX для GUI. Режим определяется value-переменными ?CONSOLE и ?GUI.
хотя это было верно для sp forth
-

AlikasS
-
- Posts: 1453
- Joined: Wed, 28 Jun 2006, 05:39
- Location: Khabarovsk
by SeMa » Thu, 10 Oct 2013, 15:15
AlikasS wrote:странно, ведь должен работать MAINX !
Похоже, так работает. А по второму вопросу есть какие-то подсказки?
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
-

SeMa
-
- Posts: 637
- Joined: Fri, 15 Apr 2005, 12:49
- Location: Украина
by Aveiro » Thu, 10 Oct 2013, 20:37
Так можно или нет создать exe-шник, котрый будет работать на компе вне зависимости установлен nnCron на компьютере или нет ? Например xStarter может скомпилировать задачу в независимый exe-шник, правда вес задачи несколько мегабайт получается...
P.s я например создал EXE, который постоянно крутится и запускает nnCron при его внезапном падении...
nncron.exe v 1.93b15 Build 1177 08.02.2016 tm.exe v 1.93b15 Build 604 08.02.2016
-
Aveiro
-
- Posts: 222
- Joined: Tue, 06 Jul 2010, 21:19
by VoidVolker » Thu, 10 Oct 2013, 20:48
Для консольных приложений: - Code: Select all
TRUE TO ?CONSOLE FALSE TO ?GUI ' my_main TO <MAIN>
Для приложений с GUI без консоли: - Code: Select all
FALSE TO ?CONSOLE TRUE TO ?GUI ' my_main MAINX !
Есть еще и третий случай - консоль и GUI одновременно. Флаги определяют надо ли создавать консольное окно или нет. Если программа без консоли - то консоль не создается. Если программа с консолью, то автоматически создается консольное окно. У ннкрона консоль работает через сокеты по сетевым протоколам - поэтому консоль запускается отдельным приложением, что позволяет например зайти в консоль ннкрона телнетом или PUTTY. Соответсвенно у ннкрона установлены флаги ?CONSOLE и ?GUI в 0 и -1 соответственно. Т.о., если нужно сделать приложение с консолью, то надо делать так: - Code: Select all
TRUE TO ?CONSOLE FALSE TO ?GUI : my_main ." Hellow from nnCron application!" CR MAIN1 ; ' my_main TO <MAIN> S" C:\nnCron_console_application.exe" SAVE MAIN1 - это цикл обработки вводимых с консоли символов. Т.е. сама консоль - без него нельзя будет что-то напечатать в консоли и после выполнения пользовательского кода окно закроется и программа завершится. По идее, чисто теоретически, вот так можно докомпилировать в ннкрон что-то еще: - Code: Select all
FALSE TO ?CONSOLE TRUE TO ?GUI : my_main 3 0 DO 500 500 BEEP 1000 PAUSE LOOP ; ' my_main MAINX ! S" C:\nnCron_modified.exe" SAVE
Но оно не работает - я не стал искать и ковырять что там и как запускается. А если надо сделать приложение без консоли, то надо делать вот так: - Code: Select all
FALSE TO ?CONSOLE TRUE TO ?GUI : my_main 3 0 DO 500 500 BEEP 1000 PAUSE LOOP ; ' my_main TO <MAIN> S" C:\nnCron_hided_application.exe" SAVE
И не забываем, что при компиляции в образ попадают все текущие настройки ннкрона, текущие глобальные переменные, плагины и весь написанный в кронтабах код на момент сохранения системы. AlikasS wrote:хотя это было верно для sp forth
Для ннкрона это тоже верно. Просто флаги нужно выставлять и точки входа. Aveiro wrote:P.s я например создал EXE, который постоянно крутится и запускает nnCron при его внезапном падении...
А чем ннгуард не устроил? Кстати, внезапные падения обычно из-за задач.
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
by Aveiro » Thu, 10 Oct 2013, 21:07
VoidVolker wrote:А чем ннгуард не устроил? Кстати, внезапные падения обычно из-за задач.
Программа суперская, но сторонняя программа подстраховывает.... меня нет за компом, а задачи весьма важные... Так может или нет еxe работать без nnCron ?
nncron.exe v 1.93b15 Build 1177 08.02.2016 tm.exe v 1.93b15 Build 604 08.02.2016
-
Aveiro
-
- Posts: 222
- Joined: Tue, 06 Jul 2010, 21:19
by VoidVolker » Thu, 10 Oct 2013, 21:23
Aveiro wrote:Так может или нет еxe работать без nnCron ?
Так ведь только что же написал как надо сохранять.
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
by AlikasS » Fri, 11 Oct 2013, 01:42
ты не прочитал или не понял, зачем столько текста? еще и с противоречиями VoidVolker wrote:Для консольных приложений: - Code: Select all
TRUE TO ?CONSOLE FALSE TO ?GUI ' my_main TO <MAIN>
как бы верно VoidVolker wrote:Т.о., если нужно сделать приложение с консолью, то надо делать так: - Code: Select all
TRUE TO ?CONSOLE FALSE TO ?GUI : my_main ." Hellow from nnCron application!" CR MAIN1 ; ' my_main TO <MAIN> S" C:\nnCron_console_application.exe" SAVE
как бы опять верно, но дальше VoidVolker wrote:А если надо сделать приложение без консоли, то надо делать вот так: - Code: Select all
FALSE TO ?CONSOLE TRUE TO ?GUI : my_main 3 0 DO 500 500 BEEP 1000 PAUSE LOOP ; ' my_main TO <MAIN> S" C:\nnCron_hided_application.exe" SAVE
упс, опять <MAIN>, когда ранее писал VoidVolker wrote:Для приложений с GUI без консоли: - Code: Select all
FALSE TO ?CONSOLE TRUE TO ?GUI ' my_main MAINX !
сам запутался?  и народ путаешь или я тебя не понял VoidVolker wrote:AlikasS wrote:хотя это было верно для sp forth
Для ннкрона это тоже верно. Просто флаги нужно выставлять и точки входа.
для крона (в последней сборке) не верно, смотри что не работает - Code: Select all
: main [NONAME TMSG: "Hello, WORLD!" 10 NONAME] MAINX ! S" my_test_task.exe" SAVE ;
а работает - Code: Select all
: main [NONAME TMSG: "Hello, WORLD!" 10 NONAME] TO <MAIN> S" my_test_task.exe" SAVE ;
приходиться точки входа подбирать методом тыка  Aveiro wrote:. Так может или нет еxe работать без nnCron ?
может. примеры выше есть и по форуму кое-где. ну или конкретный пример указывай, который ты хочешь сделать. можно даже скринсейвер сделать
-

AlikasS
-
- Posts: 1453
- Joined: Wed, 28 Jun 2006, 05:39
- Location: Khabarovsk
by VoidVolker » Fri, 11 Oct 2013, 08:45
AlikasS wrote:сам запутался? и народ путаешьили я тебя не понял
Нет, я все правильно написал. Просто выполни код и посмотри результат. AlikasS wrote:для крона (в последней сборке) не верно, смотри что не работает
Это ты слегка запутался. Просто у ннкрона в векторе <MAIN> записано свое слово инициализации и у него включен флаг ?GUI - поэтому и надо для включения консоли флаг выключать, и либо выключать либо заменять инициализатор ннкрона. По сути, между этими MAINX и <MAIN> разницы нет, т.к. они оба выполняются при запуске приложения (см. исходники спф ну или просто выполнить и проверить) - сначала выполняется MAINX, затем <MAIN>. Так что можно сделать и вот так, просто на одну фразу длиннее: - Code: Select all
FALSE TO ?CONSOLE TRUE TO ?GUI : my_main 3 0 DO 500 500 BEEP 1000 PAUSE LOOP ; ' my_main MAINX ! ' NOOP TO <MAIN> \ Выключаем ннкроновский инициализатор S" C:\nnCron_hided_application.exe" SAVE
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
by AlikasS » Fri, 11 Oct 2013, 09:32
VoidVolker wrote:Это ты слегка запутался. Просто у ннкрона в векторе <MAIN> записано свое слово инициализации
я протупил.  я это вариант и не додумал, что Николай туда обязан был засунул инициализацию и т.п. крона  . что значит давно не сталкивался с кроном. работает и работает.... - Code: Select all
' NOOP TO <MAIN>
конечно решает проблему
-

AlikasS
-
- Posts: 1453
- Joined: Wed, 28 Jun 2006, 05:39
- Location: Khabarovsk
by VoidVolker » Fri, 11 Oct 2013, 11:19
AlikasS wrote:я протупил. я это вариант и не додумал, что Николай туда обязан был засунул инициализацию и т.п. крона.
VoidVolker wrote:И не забываем, что при компиляции в образ попадают все текущие настройки ннкрона, текущие глобальные переменные, плагины и весь написанный в кронтабах код на момент сохранения системы.
Векторы по факту тоже глобальные переменные. Само собой в этот список не попадают пользовательские переменные - они создаются при запуске приложения.
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
by Aveiro » Fri, 11 Oct 2013, 21:03
Прошу добавить описание по шагам как сделать EXE и его использовать, а то все умные кругом.... и ни фига не понятно.
nncron.exe v 1.93b15 Build 1177 08.02.2016 tm.exe v 1.93b15 Build 604 08.02.2016
-
Aveiro
-
- Posts: 222
- Joined: Tue, 06 Jul 2010, 21:19
by VoidVolker » Sat, 12 Oct 2013, 10:29
- Code: Select all
: SAVE-APP \ ( a u xt -- ) \ FALSE TO ?CONSOLE TRUE TO ?GUI TO <MAIN> SAVE ;
: SAVE-SCRIPT \ ( a u xt -- ) TRUE TO ?CONSOLE FALSE TO ?GUI MAINX ! ['] NOOP TO <MAIN> SAVE ;
: SAVE: \ ( " path" -- ) ?COMP get-string [COMPILE] SLITERAL [COMPILE] [NONAME ; IMMEDIATE
: ;SAVE-APP ?COMP [COMPILE] NONAME] POSTPONE SAVE-APP ; IMMEDIATE
: ;SAVE-SCRIPT ?COMP ['] ANSI>OEM TO ANSI><OEM [COMPILE] NONAME] POSTPONE SAVE-SCRIPT ; IMMEDIATE
: ;SAVE-CONSOLE ?COMP ['] ANSI>OEM TO ANSI><OEM POSTPONE MAIN1 [COMPILE] NONAME] POSTPONE SAVE-SCRIPT ; IMMEDIATE
В консоли или в режиме выполнения(в кронтабе между <% %> или в задаче до раздела Action:): - Code: Select all
S" C:\app.exe" ' my_main SAVE-APP
- Code: Select all
S" C:\script.exe" ' my_main SAVE-SCRIPT
В отдельном слове: - Code: Select all
: TestApp SAVE: C:\app.exe MSG: "Приложение без консоли" ;SAVE-APP ;
: TestScript SAVE: C:\script.exe ." Приложение c выводом в консоль" CR ." Приложение закроется после выполнения пользовательского кода" CR 5000 PAUSE ;SAVE-SCRIPT ;
: TestConsole SAVE: C:\console_app.exe ." Приложение c работающей консолью ннкрона" CR ." Цикл консоли запускается после выполнения пользовательского кода" CR ." Выход через BYE" CR ;SAVE-CONSOLE ;
В задаче: - Code: Select all
#( Задача_112312102013 NoActive SingleInstance Action: SAVE: C:\app.exe MSG: "Приложение без консоли" ;SAVE-APP
SAVE: C:\script.exe ." Приложение c выводом в консоль" CR ." Приложение закроется после выполнения пользовательского кода" CR 5000 PAUSE ;SAVE-SCRIPT
SAVE: C:\console_app.exe ." Приложение c работающей консолью ннкрона" CR ." Цикл консоли запускается после выполнения пользовательского кода" CR ." Выход через BYE" CR ;SAVE-CONSOLE )#
Если надо сохранить задачу, то следует использовать стандартные слова RUN и LAUNCH: - Code: Select all
SAVE: C:\task_run.exe task_name RUN ;SAVE-APP
- Code: Select all
SAVE: C:\task_launch.exe task_name LAUNCH ;SAVE-APP
Единственный момент: у меня почему-то после сохранения отваливаются в работающем ннкроне все хуки и что-то там ломается.
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
Return to nnCron forum (Russian)
Who is online
Users browsing this forum: No registered users and 2 guests
|
|