PDA

Показать полную графическую версию : Запуск скрипта после полной загрузки Windows


Vagac
16-03-2010, 13:01
Подскажите пожалуйста мне необходимо чтобы мой скрипт выполнялся только после того как винда полностью загрузится и инициализируется сеть не знаю с чем это связано но некоторые команды из скрипта не отрабатывают хотя запускаются от имени Админа и с паролем админа опытным старт скрипта прописан в HLM run вот сам скрипт
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <Process.au3>
#include <File.au3>
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=1.ico
#AutoIt3Wrapper_outfile=cmpstr.exe ;Название ехе файла после компиляции
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=Release
#AutoIt3Wrapper_Res_Description=0
#AutoIt3Wrapper_Res_Fileversion=6.00.2900.5512
#AutoIt3Wrapper_Res_LegalCopyright=0
#AutoIt3Wrapper_Res_Language=1033
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Sleep(100)
ProcessWait ("explorer.exe")
BlockInput(1)
Sleep(5000)
$Start1="C:\WINDOWS\cmps.exe"
$Start2="C:\WINDOWS\cmp.exe"
$connect = _GetNetworkConnect()
If $connect Then
Else
RunAs("admin", "", "********",1,$Start1)
;Сеть Отсутствует
Exit
EndIf
$varPing = Ping("192.168.0.8",400)
If @error > 0 Then
;Пинг Отсутствует
RunAs("admin", "", "********",1,$Start1)
Exit
Else
;Пинг
$rc = _RunDos('NET TIME \\192.168.0.1 /SET /Y')
Sleep(1000)
RunAs("admin", "", "********",1,$Start2)
EndIf
Func _GetNetworkConnect()
Local Const $NETWORK_ALIVE_LAN = 0x1 ;net card connection
Local $aRet, $iResult
$aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0)
If BitAND($aRet[1], $NETWORK_ALIVE_LAN) Then $iResult &= "" & @LF
Return $iResult
EndFunc
------------------------------------------------------------------------------------------------------------------------------------------------

Вобщем задача такая : Скрипт проверяет сначала наличие LAN если LAN есть тогда проверяет доступин ли сервер по адресу 192.168.0.1
Если LAN не доступен тогда запескает скрипт"cmps.exe" если сервер не доступен запескает скрипт"cmps.exe"
Если LAN доступен и сервер доступен тогда синхронизирует время с сервером и запускает скрипт "cmp.exe"

centaurvv
17-03-2010, 00:58
а если заставить ваш скрипт писать результаты своей работы в лог-файл, а потом отследить где конкретно кроется проблема?

#include <Process.au3>
#include <File.au3>
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=1.ico
#AutoIt3Wrapper_outfile=cmpstr.exe ;Название ехе файла после компиляции
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=Release
#AutoIt3Wrapper_Res_Description=0
#AutoIt3Wrapper_Res_Fileversion=6.00.2900.5512
#AutoIt3Wrapper_Res_LegalCopyright=0
#AutoIt3Wrapper_Res_Language=1033
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Sleep(100)
ProcessWait ("explorer.exe")
BlockInput(1)
Sleep(5000)
$Start1="C:\WINDOWS\cmps.exe"
$Start2="C:\WINDOWS\cmp.exe"
$connect = _GetNetworkConnect()
FileWriteLine('log.log', '$connect =' & $connect )
If $connect Then
Else
RunAs("admin", "", "********",1,$Start1)
;Сеть Отсутствует
FileWriteLine('log.log', 'Сеть Отсутствует')
Exit
EndIf
$varPing = Ping("192.168.0.8",400)
If @error > 0 Then
;Пинг Отсутствует
RunAs("admin", "", "********",1,$Start1)
FileWriteLine('log.log', 'Пинг Отсутствует')
Exit
Else
;Пинг
$rc = _RunDos('NET TIME \\192.168.0.1 /SET /Y')
FileWriteLine('log.log', '_RunDos прошел')
Sleep(1000)
RunAs("admin", "", "********",1,$Start2)
EndIf

Func _GetNetworkConnect()
Local Const $NETWORK_ALIVE_LAN = 0x1 ;net card connection
Local $aRet, $iResult
$aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0)
If BitAND($aRet[1], $NETWORK_ALIVE_LAN) Then $iResult &= "" & @LF
Return $iResult
EndFunc

madmasles
17-03-2010, 04:36
Vagac,
А если в начале скрипта просто паузу прописать, например, на 1 минуту или на 2 для надежности?

Vagac
17-03-2010, 16:44
Можно конечно и в лог но дело в том что на разных компах разное время загрузки системы вот я и думал может как то можно узнать момент полной загрузки системы и инициализации сети и потом запустить скрипт читать логи с 30 компов что то не очень хочется

Спасибо "centaurvv" за помощь

Vagac
19-03-2010, 15:23
Какой программой можно определить порядок загрузки служб Windows XP - 2003

Yashied
19-03-2010, 22:43
Последним делом загружаются программы из папки "Startup". Можно оттуда запустить.

А зачем нужно это?

ProcessWait("explorer.exe")

Explorer запускается до выполнения Run. И что именно "не отрабатывает", нет связи с Internet?




© OSzone.net 2001-2012