Решение возникающих проблем


  1. Hе pаботает WatchConnect!
  2. Help! nnCron не дает отpедактиpовать мою задачу чеpез GUI!
  3. WatchWin* не pаботает с окном Command Prompt...
  4. nnCron не "отлавливает" нужное мне окно. В чем пpоблема?
  5. Задачи, использующие IDLE:, запускаются невовpемя!
  6. nnCron стал ругаться на слова VARIABLE, CREATE... Почему?
  7. WatchDir: и WatchFile: не работают в Новелловской сети и выдают "ошибку №2". Что делать?
  8. Почему не удается запустить приложение с сетевого диска? Почему приложения, запущенные из nnCron "не видят" сетевых дисков?
  9. С помощью WatchHotkey: сделал запуск задачи по клавиатурному сокращению. После этого в остальных программах перестали выполняться действия, назначенные на то же самое клавиатурное сокращение. В чем дело?
  10. Если запускать nnCron под Terminal Server (Remote Desktop), то в системном трее не появляется иконка nnCron. Что делать?
  11. Иногда при попытке установить nnCron "поверх" предыдущей установки выскакивает сообщение 'Невозможно открыть файл для записи: nnhook.dll'. Как быть?
  12. Пытаюсь определить переменную сразу после Rule: и получаю синтаксическую ошибку. Почему?
  13. Накладывает ли nnCron какие-то ограничения на размер кронтаба, длину строки в кронтабе, общее количество задач?

Hе pаботает WatchConnect!

WatchConnect и WatchDisconnect pаботают только в WinNT/Win2000/WinXP.


Help! nnCron не дает отpедактиpовать мою задачу чеpез GUI!

Да, чеpез GUI pеально pедактиpовать только (относительно) пpостые задачи, котоpые легко "фоpмализовать". Сложные задачи - с обильным использованием Фоpта, pегекспов, Windows Scripting - в большинстве случаев пpиходится pедактиpовать вpучную, "в сыpом виде".


WatchWin* не pаботает с окном Command Prompt...

Hа консольные окошки nnCron не pеагиpует (это ограничение Windows).

Не забывайте, что слово WIN-EXIST: корректно работает и с консольными окнами. Поэтому можно попробовать решить проблему отлавливания консольных окон с помощью периодического запуска WIN-EXIST:.


nnCron не "отлавливает" нужное мне окно. В чем пpоблема?

Скоpее всего, у этого окна есть pодитель (возможно невидимый) a cлова WatchWin* работают только с окнами веpхнего уpовня (без pодителя). Впрочем, если очень нужно, то можно попытаться обработать это дочернее окно с помощью цикла FOR-CHILD-WINDOWS:.


Задачи, использующие IDLE:, запускаются невовpемя!

Похоже, ты столкнулся с очеpедным огpаничением опеpационной системы: пpи активном консольном окне (Command Prompt, FAR и т. д.) Windows "не замечает" действий юзеpа и счетчик idle time пpодолжает инкpементиpоваться, невзиpая на его (юзеpа) активность.

Подробности: в Win9* пpи активном консольном окне игноpиpуется только ввод с клавиатуpы, а действия юзеpа с мышью обpабатываются коppектно. В Win2000 игноpиpуется и то и дpугое.


nnCron стал ругаться на слова VARIABLE, CREATE... Почему?

nnCron предоставляет возможность ограничивать синтаксические конструкции, которые можно использовать в начале описания задачи. Для этого существует переменная nncron.ini SyntaxRestriction. Скорее всего, она у тебя выставлена в ON.


WatchDir: и WatchFile: не работают в Новелловской сети и выдают "ошибку №2". Что делать?

"Ошибка №2" - это ERROR_FILE_NOT_FOUND: The system cannot find the file specified. Еще возможно появление ошибки №50 - The network request is not supported. ERROR_NOT_SUPPORTED.

По словам Николаса, слова WatchDir: и WatchFile: в Новелле пока не работают и вряд ли будут работать в обозримом будущем. Поскольку перспективы в этом смысле довольно туманны, рекомендую периодически опрашивать нужный файл/каталог на предмет 'FILE-EXIST:' - функционально это ничуть не хуже 'Watch*', хотя, конечно, немного сложнее. :)


Почему не удается запустить приложение с сетевого диска? Почему приложения, запущенные из nnCron "не видят" сетевых дисков?

Дело в том, что в ВинНТ/2000/ХР nnCron запускается сервисом, от имени SYSTEM (это встроенный пользовательский аккаунт). А у пользователя SYSTEM нет прав на доступ к сетевым дискам.

Возможны следующие пути решения этой проблемы:


С помощью WatchHotkey: сделал запуск задачи по клавиатурному сокращению. После этого в остальных программах перестали выполняться действия, назначенные на то же самое клавиатурное сокращение. В чем дело?

Начиная с версии 1.89b8, nnCron умеет "пропускать" клавиатурные сокращения к другим приложениям, если запуск задачи по WatchHotKey: противоречит Rule: или Time:. Соответственно, чтобы другие приложения смогли получать "занятое" nnCron клавиатурное сокращение вы можете прописать их в Rule:

#( test_watchhotkey
WatchHotKey: "^s"
\ пропускать хоткей если загружены 'notepad.exe' и 'bred2.exe'
Rule: PROC-EXIST: "notepad.exe" 0= PROC-EXIST: "bred2.exe" 0= AND 
Action:
    MSG: "beep"
)#

Подобным образом можно манипулировать интервалом времени (Time:):

#( test_watchhotkey1
WatchHotKey: "^@s"
\ пропускать хоткей если текущее время не подпадает под
\ временной интервал 14:00-18:00
Time: * 14-18 
Action:
    MSG: "beep"
)# 

Если запускать nnCron под Terminal Server (Remote Desktop), то в системном трее не появляется иконка nnCron. Что делать?

Запускайте nnCron не сервисом, а обычным приложением (с ключом командной строки -ns). Это устраняет большинство проблем, возникающих при работе под Terminal Server/Remote Desktop.


Иногда при попытке установить nnCron "поверх" предыдущей установки выскакивает сообщение 'Невозможно открыть файл для записи: nnhook.dll'. Как быть?

Да, иногда библиотека nnhook.dll оказывается занятой процессом, что приводит к невозможности удаления или перезаписи файла. Оказавшись в такой ситуации, вы можете вручную переименовать файл nnhook.dll, после чего запустить установку nnCron еще раз. Переименованный файл можно будет удалить после следующей перезагрузки компьютера.


Пытаюсь определить переменную сразу после Rule: и получаю синтаксическую ошибку. Почему?

Дело в том, что Rule: - это обычное определение форт-слова, только без заголовка (:NONAME) и nnCron'у не так просто "понять", где кончается правило и начинается всё остальное. И если вы добавляете код сразу после Rule:, то nnCron считает это продолжением правила - поэтому и выдает ошибку.

Самое простое решение проблемы - перенести определение переменных/массивов на пару строчек вверх, чтобы они оказались до Rule:, но если это невозможно или нежелательно, то с помощью слова ';' можно явным образом указать nnCron'у, что правило уже закончено.

Пример:

#( test_rule 
NoActive
Rule: ... ;
VARIABLE vtest   
CREATE stest 256 ALLOT
Action:
    \ ...
)#

Подробности для любознательных: Action: - это IMMEDIATE Форт слово. Оно самостоятельно завершает предыдущее определение, если таковое имеется, и начинает новое. Именно поэтому nnCron никогда не "ругается" на употребление Action: сразу после Rule:.


Накладывает ли nnCron какие-то ограничения на размер кронтаба, длину строки в кронтабе, общее количество задач?

Фактическое ограничение только одно: длина одной строки в кронтабе не должна превышать 512 символов.
Каждая задача nnCron компилируется в отдельное Форт-слово и помещается в общее адресное пространство словаря Форта, которому выделено 1024 килобайта. В этом же пространстве содержится и сам код nnCron, и различные вспомогательные слова. Вцелом, под задачи остается примерно 600 килобайт памяти. В обычных условиях этого должно хватать больше чем на две тысячи задач - ограничение, продиктованное здравым смыслом.