Почему не работает чтение из реестра в Windows 7 ?

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

Почему не работает чтение из реестра в Windows 7 ?

Postby ask » Tue, 24 Jul 2012, 05:46

Добрый день!

В Windows XP всё работает "на ура". А в "семёрке" при выполнении "REG-KEY-EXIST?" пишет в логе "Ошибка... Файл не найден.

Крон запускается приложением с админскими правами. В чём может быть дело?

Code: Select all
<%
CREATE USER_NAME_IN_REG         255 ALLOT
CREATE USER_KEY_IN_REG          255 ALLOT

CREATE USER_APPDATA             255 ALLOT
CREATE USER_LOCAL_SETTINGS      255 ALLOT
CREATE USER_LOCAL_APPDATA       255 ALLOT

CREATE USER_INTERNET_CACHE      255 ALLOT
CREATE USER_COOKIES             255 ALLOT
CREATE USER_HISTORY             255 ALLOT
CREATE USER_RECENT              255 ALLOT

CREATE COMMON_APPDATA           255 ALLOT


CREATE REGET_DIR                255 ALLOT
CREATE REGET_QUEUE              255 ALLOT
%>

#( GetSysFoldersFromRegistry
NoLog
NoDel
SingleInstance
RunOnce
Time: 32 11 2 6 * 2008
Action:
 
  S" %USERNAME%"                              EVAL-SUBST NAME2SIDS USER_NAME_IN_REG PLACE
  S" HKEY_USERS\%USER_NAME_IN_REG COUNT%"     EVAL-SUBST           USER_KEY_IN_REG  PLACE
 
  S" HKEY_USERS\%USER_NAME_IN_REG COUNT%"     EVAL-SUBST CRON-LOG
 
  S" %USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" EVAL-SUBST REG-KEY-EXIST?
  IF
    USER_APPDATA        GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\AppData"             EVAL-SUBST
    USER_LOCAL_SETTINGS GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local Settings"      EVAL-SUBST
    USER_LOCAL_APPDATA  GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local AppData"       EVAL-SUBST
    USER_INTERNET_CACHE GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache"               EVAL-SUBST
    USER_COOKIES        GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies"             EVAL-SUBST
    USER_HISTORY        GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\History"             EVAL-SUBST
    USER_RECENT         GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Recent"              EVAL-SUBST
   
    S" %USER_KEY_IN_REG COUNT%\Software\ReGet Software\ReGetDx" EVAL-SUBST REG-KEY-EXIST?
    IF
      REGET_DIR           GET-REG: "%USER_KEY_IN_REG COUNT%\Software\ReGet Software\ReGetDx\Dir"        EVAL-SUBST
      REGET_QUEUE         GET-REG: "%USER_KEY_IN_REG COUNT%\Software\ReGet Software\ReGetDx\QueueFile"  EVAL-SUBST
    THEN
   
    COMMON_APPDATA      GET-REG: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common AppData"
   
    USER_APPDATA        ASCIIZ> S" USR_APPDATA"         SETENV THROW
    USER_LOCAL_SETTINGS ASCIIZ> S" USR_LOCAL_SETTINGS"  SETENV THROW
    USER_LOCAL_APPDATA  ASCIIZ> S" USR_LOCAL_APPDATA"   SETENV THROW
    USER_INTERNET_CACHE ASCIIZ> S" USR_INTERNET_CACHE"  SETENV THROW
    USER_COOKIES ASCIIZ>        S" USR_COOKIES"         SETENV THROW
    USER_HISTORY ASCIIZ>        S" USR_HISTORY"         SETENV THROW
    USER_RECENT ASCIIZ>         S" USR_RECENT"          SETENV THROW
   
    COMMON_APPDATA ASCIIZ>      S" COM_APPDATA"         SETENV THROW
  ELSE
    S" %APPDATA%"                       EVAL-SUBST S" USR_APPDATA"         SETENV THROW
    S" %USERPROFILE%\Local Settings"    EVAL-SUBST S" USR_LOCAL_SETTINGS"  SETENV THROW
    S" %LOCALAPPDATA%"                  EVAL-SUBST S" USR_LOCAL_APPDATA"   SETENV THROW
    S" "                                EVAL-SUBST S" USR_INTERNET_CACHE"  SETENV THROW
    S" "                                EVAL-SUBST S" USR_COOKIES"         SETENV THROW
    S" "                                EVAL-SUBST S" USR_HISTORY"         SETENV THROW
    S" "                                EVAL-SUBST S" USR_RECENT"          SETENV THROW
   
    S" %ALLUSERSPROFILE%"               EVAL-SUBST S" COM_APPDATA"         SETENV THROW
  THEN
   
  S" USR_APPDATA        = %USR_APPDATA%"           EVAL-SUBST CRON-LOG
  S" USR_LOCAL_SETTINGS = %USR_LOCAL_SETTINGS%"    EVAL-SUBST CRON-LOG
  S" USR_LOCAL_APPDATA  = %USR_LOCAL_APPDATA%"     EVAL-SUBST CRON-LOG
  S" USR_INTERNET_CACHE = %USR_INTERNET_CACHE%"    EVAL-SUBST CRON-LOG
  S" USR_COOKIES        = %USR_COOKIES%"           EVAL-SUBST CRON-LOG
  S" USR_HISTORY        = %USR_HISTORY%"           EVAL-SUBST CRON-LOG
  S" USR_RECENT         = %USR_RECENT%"            EVAL-SUBST CRON-LOG
  S" COM_APPDATA        = %COM_APPDATA%"           EVAL-SUBST CRON-LOG
)#
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: Почему не работает чтение из реестра в Windows 7 ?

Postby VoidVolker » Tue, 24 Jul 2012, 06:40

Оно вообще не должно работать.
Code: Select all
    USER_APPDATA        GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\AppData"             EVAL-SUBST
    USER_LOCAL_SETTINGS GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local Settings"      EVAL-SUBST
    USER_LOCAL_APPDATA  GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local AppData"       EVAL-SUBST
    USER_INTERNET_CACHE GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache"               EVAL-SUBST
    USER_COOKIES        GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies"             EVAL-SUBST
    USER_HISTORY        GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\History"             EVAL-SUBST
    USER_RECENT         GET-REG: "%USER_KEY_IN_REG COUNT%\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Recent"              EVAL-SUBST

Code: Select all
      REGET_DIR           GET-REG: "%USER_KEY_IN_REG COUNT%\Software\ReGet Software\ReGetDx\Dir"        EVAL-SUBST
      REGET_QUEUE         GET-REG: "%USER_KEY_IN_REG COUNT%\Software\ReGet Software\ReGetDx\QueueFile"  EVAL-SUBST

А где строки, в которых надо вычислить подстроки? GET-REG — не возвращает строку. Т.е. EVAL-SUBST получает на входе пустой стек. Причем девять раз.
Code: Select all
    S" %APPDATA%"                       EVAL-SUBST S" USR_APPDATA"         SETENV THROW
    S" %USERPROFILE%\Local Settings"    EVAL-SUBST S" USR_LOCAL_SETTINGS"  SETENV THROW
    S" %LOCALAPPDATA%"                  EVAL-SUBST S" USR_LOCAL_APPDATA"   SETENV THROW
    S" "                                EVAL-SUBST S" USR_INTERNET_CACHE"  SETENV THROW
    S" "                                EVAL-SUBST S" USR_COOKIES"         SETENV THROW
    S" "                                EVAL-SUBST S" USR_HISTORY"         SETENV THROW
    S" "                                EVAL-SUBST S" USR_RECENT"          SETENV THROW
   
    S" %ALLUSERSPROFILE%"               EVAL-SUBST S" COM_APPDATA"         SETENV THROW

Слов:
Code: Select all
APPDATA USERPROFILE LOCALAPPDATA ALLUSERSPROFILE

В ннкроне нет. При попытке их выполнить - получтся исключение.
Вместо:
Code: Select all
S" %LOCALAPPDATA%"                  EVAL-SUBST

Следует писать просто:
Code: Select all
LOCALAPPDATA

Если конечно есть такое слово и оно возвращает строку.
Пытаться вычислить подстроки в пустой строке бессмысленно:
Code: Select all
S" "                                EVAL-SUBST

Достаточно:
Code: Select all
S" "


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

Re: Почему не работает чтение из реестра в Windows 7 ?

Postby ask » Tue, 24 Jul 2012, 15:46

>>Оно вообще не должно работать.

OK. А почему же в Windows XP РАБОТАЕТ? Проверить-то легче лёгкого...

И собственно вопрос заключался в другом: ПОЧЕМУ под Windows 7 не работает REG_KEY-EXIST для указанной ветки?
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: Почему не работает чтение из реестра в Windows 7 ?

Postby VoidVolker » Tue, 24 Jul 2012, 17:55

ask wrote:>>Оно вообще не должно работать.

OK. А почему же в Windows XP РАБОТАЕТ? Проверить-то легче лёгкого...

И собственно вопрос заключался в другом: ПОЧЕМУ под Windows 7 не работает REG_KEY-EXIST для указанной ветки?

Вполне возможно из-за того, что на стеке лежит какой-нибудь мусор или ноль, тем более, что EVAL-SUBST состояние стека не меняет.
ask wrote:И собственно вопрос заключался в другом: ПОЧЕМУ под Windows 7 не работает REG_KEY-EXIST для указанной ветки?

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


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 6 guests