Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » nnCron

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

AlikasS

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0. UAC отключаем
1.  крон настроенный ( на предыдущих версиях винды) в сторону,
ставим чистый nncron.exe v 1.93b10 Build 1141 сервисом (в папку по умолчанию),
через PROCEXP.EXE смотрим, куда сервис nncron прописался в плане  
Current directory,  
у меня это папка C:\Windows\System32\config\systemprofile\AppData\Roaming\nnCron\
(причем если сервис ставить в разные папки, Current directory все равно будет одна.)
запоминаем папку  
( в C:\Windows\System32\config\systemprofile\AppData\Roaming\ я так понял винда записывает сторонние сервисы)
2. удаляем установленный крон или останавливаем и  
3. просто копируем настроенный крон в новую!! папку, определенную на первом этапе. пока  не запускаем
4. несколько правок в nncron.ini,  

Код:
\ убираем проверку на паралельный запуск  
' NOOP ' DoubleInstance? JMP
 
\ смена пути файла once.txt
{{ ONCE-MODULE
: once2.txt S" %ModuleDirName%etc\%USERNAME%\once.txt" EVAL-SUBST ;
' once2.txt ' once.txt JMP
}}
 
\ смена пути файла taskinfo.txt
: taskinfo2.txt S" %ModuleDirName%etc\%USERNAME%\taskinfo.txt" EVAL-SUBST ;
' taskinfo2.txt ' taskinfo.txt JMP
 
\ смена пути файла fileinfo.txt  
: fileinfo2.txt S" %NNCRON-HOME-DIR%\etc\%USERNAME%\fileinfo.txt" EVAL-SUBST ;
 ' fileinfo2.txt ' fileinfo.txt JMP
 
\ смена пути файла CronOUT  
: CronOUT2 S" nncron.%USERNAME%.out" EVAL-SUBST ;
 ' CronOUT2 ' CronOUT JMP
 
\ ниже все это было в старом кроне, надо заменить то что было
 Cronlog: "log\%MM%%DD%_cron.%USERNAME%.log"
 LogTimeFormat: "%hh%:%mm%:%ss% %ThreadId% %USERNAME%"  
 
: CRONTAB-ERROR ( a u -- )
    WinNT? IF 10 1 DO 100 I 100 * BEEP LOOP ELSE 1 1 BEEP THEN
    ERR-MSG: "CRONTAB ERROR!!!.%crlf%%USERNAME%%crlf%TASK FILE: %CUR-TAB-FILENAME COUNT%%crlf%TASK: %CUR-TASK-NAME%%crlf%Line: %CURSTR @%"
;
\ разные порты у удаленной консоли у сервиса и приложения
USERNAME S" SYSTEM" COMPARE  0= USERNAME S" система" COMPARE 0= OR \ если совпало выдаст 0
[IF]
RemConsolePort: 2002 \ порт для сервиса
[ELSE]
RemConsolePort: 2003 \ порт для приложения
[THEN]

\ потенциально можно из одного крона управлять другим через консоль  
5. пару слов для различия задач ( кронтабы ведь общие) сервиса и приложения
можно так же расположить в nncron.ini или в начале первого кронтаба между <% %>

Код:
: ONLY_SYSTEM USERNAME S" SYSTEM" COMPARE 0= USERNAME S" система" COMPARE 0= OR NOT IF S" NoActive" SFIND DROP EXECUTE THEN ;
: ONLY_USER USERNAME S" SYSTEM" COMPARE 0= USERNAME S" система" COMPARE 0= OR IF S" NoActive" SFIND DROP EXECUTE THEN ;
и потом в общем табе в задачах пишем

Код:
#( задача_для_приложения
ONLY_USER
Action:
MSG: "тест"
)#
#( задача_для_сервиса
ONLY_SYSTEM
Action:
\ тут задание для сервиса
)#

6. в новой!!! папке крона запускаем батник reSetnn.bat ( от Администратора)
содержимое:

Код:
cd %~dp0
 
cd %CD%
echo setting secure option
cacls "%CD%" /g ‚бҐ:F  /e /c /t
cacls "%CD%" /g All:F  /e /c /t
cacls "%CD%" /g Users:F  /e /c /t
PAUSE
 
for /d %%i in ("%CD%") do (
    set NNPROGRAMFILESSHORT=%%~si
)
 
@echo off
echo kill process nncron
taskkill /f  /t /im nncron.exe
PAUSE
echo delete service nncron
sc delete nnCron
PAUSE
echo delete HKCU\Software\Microsoft\Windows\CurrentVersion\Run key nncron
REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Run /f /v nnCron
PAUSE
echo delete HKLM\Software\Microsoft\Windows\CurrentVersion\Run key nnCron
REG DELETE HKLM\Software\Microsoft\Windows\CurrentVersion\Run /f /v nnCron
PAUSE
echo create service
sc create nnCron type= own type= interact start= auto binPath= "%NNPROGRAMFILESSHORT%\NNCRON.EXE -dir %NNPROGRAMFILESSHORT%"
PAUSE
echo start service
net start nnCron
PAUSE
 echo CREATE HKLM key
rem REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v nnCron /f /d "%NNPROGRAMFILESSHORT%\nncron.exe -ns -dir %NNPROGRAMFILESSHORT%"
 REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v nnCron /f /d "%NNPROGRAMFILESSHORT%\nncron.exe -ns -dir %NNPROGRAMFILESSHORT%"
 PAUSE
 echo START NNCRON UNDER USER
 START %NNPROGRAMFILESSHORT%\nncron.exe -ns -dir %NNPROGRAMFILESSHORT%
 PAUSE
который прибивает текщие процессы крона (с дочерними!!!) если они есть, удаляет сервис nncron,  
чистит запуск крона через рееестр (автозагрузку не чистит, не копал!! самостоятельно чистим если она есть!!)
прописывает новый сервис с параметром -dir и текущей папкой с коротким именем, запускает сервис,
прописывает автозапуск крона как приложения для всех пользователей, с параметром -ns -dir и текущей папкой с коротким именем,
запускает приложение с этими параметрами.
 
 получается, и сервис и приложение "пасутся" в одной папке, кронтабы общие...
причем, если сменить пользователя, без выхода предыдущего, запуститься крон как приложение у следующего пользователя.
и через меню пользовательского крона можно менять сервисного крона задачи.
 
где-то здесь я включил UAC, после перезагрузки крон от пользователя (в виде приложения) не запустился
это все исправится после пункта 8.1

 
8.  вариант получения интерактивности для сервиса в WIN7 (AsLoggedUser LoadProfile).
  сервису нужен "основательно" загруженный профиль пользователя,
  (в хелпе есть отсылка на это в задаче про очистку корзины)
  этого можно достигнуть запуская еще один крон
  отдельным процессом от имени залогиненого пользователя.
 
8.1 сначала нам нужно сделать доступ пользователей к папке крона,  
 в последствии в этой папке будут запускаться скрипты от имени пользователя.
 UAC включен, запускаем explorer (который в пуск-все программы-стандартные-проводник)
 от имени Администратора, проходим до
рабочей папки крона, соглашаясь открыть постоянный доступ для текущего пользователя,
в конце, на папку крона, добавляем во вкладке безопасность полный доступ для группы ВСЕ.
(потом, для сохранения безопасности, на папке C:\Windows\System32\config\systemprofile  
можно убрать доступ для текущего пользователя.)
в моем случае рабочая папка сервиса крона
C:\Windows\System32\config\systemprofile\AppData\Roaming\nnCron\
ну я ранее про нее уже писал.
 
8.2 интерактивность сервиса крона достигается подключением плагина CronScript.spf в nncron.ini  
со следующим содержимым

Код:
\ File:         CronScript.spf
\ Author:       AlikasS
\ Date:        22.12.10
\ Words: <CronScript> </SCRIPT> CronScript-EVAL-OFF CronScript-EVAL-ON
\  
\ Usage:  
\ <CronScript> <команды крона> </SCRIPT>
\  
\ Settings:  
\ CronScript-EVAL-OFF / CronScript-EVAL-OFF - для включения/выключения обработки переменных nncron между знаками %% в тексте команд
\  
\ Description:
\ 1. Позволяет писать код для исполнения его отдельным процессом крона по ключу -runfile прямо в тексте задачи
\ Action:
\ <CronScript>  
\ : main 1000 PAUSE MSG: "исполняем код" ;
\ </SCRIPT>
\  
\ 2. CronScript-EVAL-ON - для включения возможности использоваться макро-переменные nnCron,  
\ окруженные с двух сторон знаками процента (%).
\  
\ 3. CronScript-EVAL-OFF - (по умолчанию) %% не обрабатываются.
 
0 [IF]   \ this is a comment string
 
Example:
 
#( ~test-start-bat
NoActive
Action:
<CronScript>
: main
MSG: "скрипт крона"
;
</SCRIPT>
)#
 
[THEN]   \ this is a comment string
 
VECT <CronScript-exec>
 
: cronscript-exec2 ( a u a1 u1 --)
S" %GetCurrentThreadId ABS%_%GetTickCount%.FEX" EVAL-SUBST SCR-FNAME 2!
SCR-FNAME 2@ R/W CREATE-FILE 0=
IF >R
 R@ WRITE-FILE THROW
R> CLOSE-FILE DROP
StartIn: "%ModuleDirName%"
S" %ModuleDirName%nnCron.exe -runfile" EVAL-SUBST S"  " S+  S" %SCR-FNAME 2@%" S+ EVAL-SUBST StartScriptApp
SCR-FNAME 2@ DELETE-FILE THROW
ELSE
2DROP
THEN
;
 
: cronscript-exec3 ( a u a1 u1 --)
S" %GetCurrentThreadId ABS%_%GetTickCount%.FEX" EVAL-SUBST SCR-FNAME 2!
SCR-FNAME 2@ R/W CREATE-FILE 0=
IF >R
EVAL-SUBST R@ WRITE-FILE THROW
R> CLOSE-FILE DROP
StartIn: "%ModuleDirName%"
S" %ModuleDirName%nnCron.exe -runfile" EVAL-SUBST S"  " S+  S" %SCR-FNAME 2@%" S+ EVAL-SUBST StartScriptApp
SCR-FNAME 2@ DELETE-FILE THROW
ELSE
2DROP
THEN
;
 
: CronScript-EVAL-OFF ['] cronscript-exec2 TO <CronScript-exec> ; CronScript-EVAL-OFF
: CronScript-EVAL-ON ['] cronscript-exec3 TO <CronScript-exec> ;
 
: <CronScript> ['] <CronScript-exec> S" </SCRIPT>" <script> ; IMMEDIATE
после подключения плагина, крон надо перезапустить
после этого задачи для сервиса крона с интерактивностью в вин7 будут выглядеть например так

Код:
#( тестдля7-1
ONLY_SYSTEM \ для крона запущенного сервисом
AsLoggedUser \ как залогин.юзер
LoadProfile \ загрузить профиль
Action:
<CronScript>
: main
MSG: "крон сервиса работает"
;
</SCRIPT>
)#

задача по мощней, пример передачи переменных в скрипт

Код:
#( тестдля7-2
0 VALUE T1
CREATE Str1 125 ALLOT
ONLY_SYSTEM \ для крона запущенного сервисом
AsLoggedUser \ как залогин.юзер
LoadProfile \ загрузить профиль
Action:
111 TO T1  
S" внешняя строка" Str1 PLACE
 
CronScript-EVAL-ON \ включаем обработку %%
<CronScript>
VARIABLE tray_icon_id
0 VALUE T2
CREATE Str2 125 ALLOT
S" внутренняя строка" Str2 PLACE
666 TO T2
: main
        S" nnCron: task started" 32512 0 LoadIconA ADD-TI
        tray_icon_id !
    HINT: "%%T2%% - %T1%"
5000 PAUSE
        S" nnCron: task continued" 32515 0 LoadIconA tray_icon_id @ MODIFY-TI
    MSG: "%%Str2 COUNT%% - %Str1 COUNT%"
 tray_icon_id @ DEL-TI
;
</SCRIPT>
)#
P.S.
1.кому интересно
код между <CronScript> и </SCRIPT>
сохраняется во временный файл, который запускается еще одним процессом крона с ключем -runfile,
с авторизацией и загрузкой профиля текущего пользователя.
поэтому код между  <CronScript> ... </SCRIPT>
должен содержать слово : main ; , ну т.е. все что касается ключа -runfile
а так как код запускается в другой копии крона,  
он ничего не будет знать о коде написанном в кронтабе крона-сервиса.
т.е. не будет видеть переменных, всяких др.слов и т.п. без некоторых дополнительных телодвижений
передачу значения переменной и строки внутрь <CronScript> </SCRIPT> я показал в задаче тестдля7-2
CronScript-EVAL-ON \ включаем обработку %%, без  нее значение не передашь
в случае %%Str2 COUNT%% и %%T2%% - первые внешние кавычки обработает nncron-сервис, вторые обработает nncron- запущенный <CronScript>
в случае %Str1 COUNT% и %T1% кавычки обработает nncron-сервис и поместит туда свое значение
2.авторизация и подгрузка профиля
при указании конкретного юзера (User: "username" SecPassword: "pass" Domain: "domenname" LogonInteractive),  
который сейчас уже залогинен, НЕ произойдет в залогиненой сессии
а вот AsLoggedUser  LoadProfile нормально происходит в активной сессии.
 
кстати не забывайте про запуск tm.exe без ключей (появилось в 10 бете)

Всего записей: 183 | Зарегистр. 30-11-2009 | Отправлено: 09:21 26-01-2011 | Исправлено: AlikasS, 07:31 10-03-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » nnCron


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru