Запуск приложения с проверкой наличия соединения с Internet

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

Postby makrus » Sat, 19 May 2007, 14:22

-=A=-
Ну вот теперь все ясно! :idea:
1.
работает как нужно
и это пожалуй самое главное!
2.
при: ...Rule: USERNAME S" SYSTEM" COMPARE / 0=... ругается, Ошибка стека в Rule:
и это правильно, т.к. это не символ начала комментов :wink:
3.
вот такой вариант:...Rule: USERNAME S" SYSTEM" COMPARE...работает
, ага и это правильно, т.к. COMPARE возвращает 0 если сравнение истинно, тут я виноват :oops: на автомате вставил...
все познается в сравнении
makrus
 
Posts: 336
Joined: Mon, 12 Jul 2004, 14:46
Location: Волгоград

Postby VoidVolker » Sat, 19 May 2007, 14:37

#( TEST1
Time: */2
NoLog
Rule: USERNAME S" SYSTEM" COMPARE / 0=
Action:
TMSG: "НЕ РАВНО!" 5
)#
ругается, Ошибка стека в Rule: , а при:

Конечно будет ругатся:
/ - это деление
\ - а это комментарий
Конструкция
Code: Select all
USERNAME S" SYSTEM" COMPARE 0=

сравнивает две строки, и если они равны, то возвращает истину (-1)
А вот описание возвращаемого флага словом COMPARE ( addr1 u1 addr2 u2 -- flag )
Если две строки идентичны, flag ноль (0).
Если две строки идентичны до длины наиболее короткой из строк, то flag минус единица (-1), если u1 меньше u2
Если две строки идентичны до длины наиболее короткой из строк, то flag минус единица (1), если u2 меньше u1
Если две строки не идентичны до длины наиболее короткой из строк, то flag минус единица (-1), если первый несовпадающий символ строки, заданной addr1 u1 имеет меньшее числовое значение, чем соответствующий символ в строке, заданной addr2 u2, и единица в противном случае.

Code: Select all
0=

(нулю равно?)
аналогично
Code: Select all
NOT

(инвертировать флаг)
Вот так будет немного оптимальнее:
Code: Select all
#( MyProgram_ONLINE
Time: */2  * * * * *
AsLoggedUser
Rule: USERNAME S" SYSTEM" COMPARE
Action:
HOST-EXIST: "www.rambler.ru" HOST-EXIST: "www.google.com" HOST-EXIST: "www.ya.ru" OR OR
PROC-EXIST: "MyProgram.exe"
   IF
      0=
      IF
         SWHide
         START-APPW: taskkill.exe /IM "MyProgram.exe" /F /T
         PAUSE: 1000 TRAY-REFRESH
      THEN
   ELSE
      IF
         START-APP: C:\Program Files\MyProgram.exe
      THEN
   THEN
)#

По умолчанию служба крона стартует от имени пользователя SYSTEM - т.е. как системная служба с полными правами, соответственно так же стартуют и задачи. А опция AsLoggedUser запускает задачу от имени текущего залогиненого пользователя.
Last edited by VoidVolker on Sat, 19 May 2007, 14:54, edited 2 times in total.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby -=A=- » Sat, 19 May 2007, 14:38

Ну, что тут сказать, большое человеческое спасибо :partyman:

Есть правда ещё некоторые непонятки.
Как будет себя вести вторая часть:

Code: Select all
ELSE
  Inet? 0= 
  IF
    SWHide
    START-APPW: taskkill.exe /IM "MyProgram.exe" /F /T
    PAUSE: 1000 TRAY-REFRESH
  THEN


при условии, что нет ни инета ни программы? Всё равно будет срабатывать? У меня на другой машине в похожем скрипте этот кусок почему-то отрабатывает, я это заметил случайно, потому, что на той машине DrWeb, а он свои "балоны" с сообщениями в трее выкидывает каждый раз, когда либо мышкой туда наводишь, либо когда происхожит TRAY-REFRESH. Если бы не он, то и не заметил бы, что вторая часть отрабатывает вне зависимости от условий.
-=A=-
 
Posts: 22
Joined: Fri, 04 May 2007, 18:43

Postby makrus » Sat, 19 May 2007, 14:58

-=A=-
Как будет себя вести вторая часть:...при условии, что нет ни инета ни программы?...

так ведь вторая часть будет отрабоатывать только если программа есть, а если ее нет, то отработает первая часть.

VoidVolker
сравнивает две строки, и если они равны, то возвращает истину (-1)
, если строки равны, то возвращает "0" :wink: , а за способ оптимизации - спасибо, возьму на вооружение.
все познается в сравнении
makrus
 
Posts: 336
Joined: Mon, 12 Jul 2004, 14:46
Location: Волгоград

Postby VoidVolker » Sat, 19 May 2007, 15:12

Inet? 0=
IF
SWHide
START-APPW: taskkill.exe /IM "MyProgram.exe" /F /T
PAUSE: 1000 TRAY-REFRESH
THEN
при условии, что нет ни инета ни программы? Всё равно будет срабатывать? У меня на другой машине в похожем скрипте этот кусок почему-то отрабатывает, я это заметил случайно, потому, что на той машине DrWeb, а он свои "балоны" с сообщениями в трее выкидывает каждый раз, когда либо мышкой туда наводишь, либо когда происхожит TRAY-REFRESH. Если бы не он, то и не заметил бы, что вторая часть отрабатывает вне зависимости от условий.

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

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

Postby ANR Daemon » Fri, 25 May 2007, 02:43

После некоторых тестов выяснилось, что задание с флагом AsLoggedUser вообще не выполняется если нет залогинившихся пользователей.
Мне это поперек горла, а вам, может, и поможет.
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests

cron