Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Не работает автозапуск скрипта (http://forum.oszone.net/showthread.php?t=226133)

Dzutte 24-01-2012 16:52 1843465

Не работает автозапуск скрипта
 
Доброго всем времени суток.
Столкнулся с такой проблемой: на машине стоит скрипт (os Windows 7 x64), копирующий файлы из папки А в папку В; автозапуск скрипта обеспечивается записью в реестре: "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\ScriptName", d:\Distr\ScriptName.vbs". До недавнего времени все работало отлично, но после перестановки винды автозапуск перестал работать. При старте машины диспетчер задач отображает процесс wscript.exe, при этом скрипт не работает. Если запустить его принудительно (щелкнуть enter-ом по файлу скрипта), то появляется процесс wscript.exe*32 и тогда скрипт отрабатывает как надо.
Помогите пожалуйста восстановить автозапуск!

Petya V4sechkin 24-01-2012 17:05 1843477

Цитата:

Цитата Dzutte
появляется процесс wscript.exe*32

Это ненормально (запуск 32-битной версии вместо 64-битной).
Попробуйте в командной строке (cmd.exe) от имени Администратора выполнить:
Код:

regsvr32 atl.dll
regsvr32 dispex.dll
regsvr32 jscript.dll
regsvr32 scrrun.dll
regsvr32 scrobj.dll
regsvr32 vbscript.dll
regsvr32 msxml3.dll
regsvr32 ole32.dll
regsvr32 oleaut32.dll
wscript /regserver

После этого убедитесь, что в разделе реестра HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command параметр по умолчанию типа REG_EXPAND_SZ равен
"%SystemRoot%\System32\WScript.exe" "%1" %*

Цитата:

Цитата Dzutte
Если запустить его принудительно (щелкнуть enter-ом по файлу скрипта)

Откуда вы его щелкаете, в каком 32-битном файловом менеджере?

Dzutte 25-01-2012 09:40 1844025

Цитата:

Цитата Petya V4sechkin
Откуда вы его щелкаете, в каком 32-битном файловом менеджере?

Total Commander 7.56a

Цитата:

Цитата Petya V4sechkin
После этого убедитесь, что в разделе реестра HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command параметр по умолчанию типа REG_EXPAND_SZ равен
"%SystemRoot%\System32\WScript.exe" "%1" %*

Все так

Petya V4sechkin 25-01-2012 09:42 1844026

Цитата:

Цитата Dzutte
Total Commander

Ну естественно, он же 32-битный.
Из проводника запустите скрипт.

Цитата:

Цитата Dzutte
на машине стоит скрипт

Содержимое выложите?

Dzutte 25-01-2012 09:49 1844029

Цитата:

Цитата Petya V4sechkin
Содержимое выложите?

Просто текстом в сообщение вставить или как лучше сделать?

Цитата:

Цитата Petya V4sechkin
Из проводника запустите скрипт.

Запуск из проводника дает 64-х битный процесс wscript.exe. Скрипт соответственно не отрабатывает.

Petya V4sechkin 25-01-2012 09:53 1844030

Цитата:

Цитата Dzutte
Просто текстом в сообщение вставить

С тегом CODE.

Dzutte 25-01-2012 09:59 1844034

Код:

ON ERROR RESUME NEXT
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
folder_out = ".........................." ' папка откуда копировать
folder_in = "............................" ' папка куда копировать
period = 3000 'милисекунды

'' Запускаться при каждой перезагрузке
'Set File2 = f.GetFile(WScript.ScriptFullName)
'File2.Copy ("d:\Distr\Gigabyte.vbs")
's.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\Gigabyte", d:\Distr\Gigabyte.vbs"


do
' Получаем список файлов
Set f_out = fso.GetFolder(folder_out)
Set f_in = fso.GetFolder(folder_in)
Set fc = f_out.Files
s = "File name" & vbtab & "created" & "accessed" & vbtab & "modified" & vbcrlf
For Each f1 in fc
  ' если файл сушествеут проверяем изменился ли он
  If (fso.FileExists(folder_in & f1.name)) Then
      ' существует... проверяем изменился ли он (по дате модификации)
      set f_inc = fso.GetFile(folder_in & f1.name)
      if (f1.DateLastModified = f_inc.DateLastModified) then
         
      else
          ' одноименный фаил во входной папке переименовываем с добавлением даты модификации
          tmp = replace(f_inc.DateLastModified & "."  & fso.GetExtensionName(f_inc.name),":","_")
          tmp = replace(tmp," ","_")
          'WScript.Echo tmp & vbtab & f_inc.name
          'Wscript.Echo replace(f_inc.DateLastModified & "."  & fso.GetExtensionName(f_inc.name),":","_")
          f_inc.Copy(folder_in & fso.GetBaseName(f_inc.name) & "_" & tmp)
          f_inc.Delete(vbTrue)
          ' копируемый файл просто копируем без изменения
          f1.Copy (folder_in & f1.name )
      end if
  Else
      ' не существует.... копируем
      f1.Copy (folder_in & f1.name)
  End If
 
  's = s & f1.shortname & vbtab & f1.DateCreated & vbtab & f1.DateLastAccessed & vbtab & f1.DateLastModified & vbcrlf

Next
WScript.Sleep(period)

loop

's.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Gigabyte", "C:\WINDOWS\SYSTEM\Gigabyte.vbs"


Petya V4sechkin 25-01-2012 10:09 1844040

Цитата:

Цитата Dzutte
folder_out = ".........................." ' папка откуда копировать
folder_in = "............................" ' папка куда копировать

А чего точками? Секретная информация?
Уберите строку ON ERROR RESUME NEXT и смотрите, какую ошибку выдаст.


Время: 23:58.

Время: 23:58.
© OSzone.net 2001-