Компиляция задачи в EXE файл.

Обсуждение программ nnCron и nnCron LITE

Re: Компиляция задачи в EXE файл.

Postby 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
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Компиляция задачи в EXE файл.

Postby 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
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Компиляция задачи в EXE файл.

Postby 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
)#
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Компиляция задачи в EXE файл.

Postby 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
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Компиляция задачи в EXE файл.

Postby SeMa » Thu, 10 Oct 2013, 15:15

AlikasS wrote:странно, ведь должен работать MAINX !

Похоже, так работает.
А по второму вопросу есть какие-то подсказки?
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Компиляция задачи в EXE файл.

Postby 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

Как сохранить EXE

Postby 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 при его внезапном падении...

А чем ннгуард не устроил? Кстати, внезапные падения обычно из-за задач.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Компиляция задачи в EXE файл.

Postby 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

Re: Компиляция задачи в EXE файл.

Postby VoidVolker » Thu, 10 Oct 2013, 21:23

Aveiro wrote:Так может или нет еxe работать без nnCron ?

Так ведь только что же написал как надо сохранять.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Компиляция задачи в EXE файл.

Postby 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 ?

может. примеры выше есть и по форуму кое-где.
ну или конкретный пример указывай, который ты хочешь сделать.
можно даже скринсейвер сделать
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Компиляция задачи в EXE файл.

Postby 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
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Компиляция задачи в EXE файл.

Postby AlikasS » Fri, 11 Oct 2013, 09:32

VoidVolker wrote:Это ты слегка запутался. Просто у ннкрона в векторе <MAIN> записано свое слово инициализации

я протупил. :oops: я это вариант и не додумал, что Николай туда обязан был засунул инициализацию и т.п. крона :D .
что значит давно не сталкивался с кроном. работает и работает....
Code: Select all
' NOOP TO <MAIN> 
конечно решает проблему
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Компиляция задачи в EXE файл.

Postby VoidVolker » Fri, 11 Oct 2013, 11:19

AlikasS wrote:я протупил. я это вариант и не додумал, что Николай туда обязан был засунул инициализацию и т.п. крона.

VoidVolker wrote:И не забываем, что при компиляции в образ попадают все текущие настройки ннкрона, текущие глобальные переменные, плагины и весь написанный в кронтабах код на момент сохранения системы.

Векторы по факту тоже глобальные переменные. Само собой в этот список не попадают пользовательские переменные - они создаются при запуске приложения.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Компиляция задачи в EXE файл.

Postby 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

Re: Компиляция задачи в EXE файл.

Postby 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


Единственный момент: у меня почему-то после сохранения отваливаются в работающем ннкроне все хуки и что-то там ломается.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 0 guests

cron