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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Условие выхода при ошибке в работе скрипта (http://forum.oszone.net/showthread.php?t=141402)

ShadowMas 30-05-2009 00:31 1130687

Условие выхода при ошибке в работе скрипта
 
Люди вот столкнулся с такой проблемкой не как не получаеться написать коректное условие закрытия при ошибке выполнения скрепта?
Дело в том,что все окна в используемой мной програмке имеют одинаковое название!

Я решил выйти из положения каким образом поставил выскакивающее окно типа
Код:

MsgBox(64, "Ошибка установки", "Закройте все открытые окна и попробуйте заново")
Ну чёт получаеться не совсем то, что я планировал дело в том что когда ищёзает указаное мною окно то начинает действовать
часть скрипта "ложь" ну вообщем сейчас всё покажу на примере:

Код:

BlockInput(1)
DirCreate("D:\Test")
FileDelete("D:\Test\*.tib")
RegWrite('HKCU\SOFTWARE\Acronis\TrueImageHome\DontShow', 'IncrementalTip', 'REG_SZ', '1')
Run(@ProgramFilesDir & "\Acronis\TrueImageHome\TrueImage.exe")
WinWaitActive("Acronis*True*Image*Home")
Sleep(8000)
Send("{LALT}")
Send("{ENTER}")
Send("{ENTER}")
WinWaitActive("Мастер резервного копирования")
Send("{ENTER}")
WinWaitActive("Мастер резервного копирования")
Send("{ENTER}")
WinWaitActive("Мастер резервного копирования")
Send("{ENTER}")
Sleep(2000)
Send("{BS 25}")
Send("D:\Test\Образ.tib")
Send("{ENTER}")
WinExists("Мастер резервного копирования")
Sleep(1000)
Send("{ENTER}")
WinExists("Мастер резервного копирования")
Sleep(1000)
Send("{ENTER}")
WinExists("Мастер резервного копирования")
Sleep(1000)
ControlClick("Мастер резервного копирования", "", "FXWindow6")
WinWaitActive("Мастер резервного копирования")
ControlClick("Мастер резервного копирования", "", "FXWindow6")
Send("{ENTER}")
MsgBox(64, "Информация", "Дождитесь пока программа завершит работу", 5)
If WinExists("Информация")==1 Then
WinClose("Acronis*True*Image*Home")
RegDelete("HKCU\SOFTWARE\Acronis\TrueImageHome\DontShow")
Exit
Else
BlockInput(0)       
MsgBox(64, "Ошибка установки", "Закройте все открытые окна и попробуйте заново")
Exit
EndIf


Люди может подскажите, может кто уневерсальный код придумал типа как на повторный запуск скрипта:

Код:

$g_szVersion = "My Script 1.1"
If WinExists($g_szVersion) Then Exit ; Он уже запущен
AutoItWinSetTitle($g_szVersion)


Или подскажите к примеру как сделать ,что бы при ошибке скрипт не на паузу ставал а завершал работу по умолчанию...

Creat0R 30-05-2009 00:55 1130701

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

Или просто нужно не запускать скрипт повторно? Для этого есть функция _SingleTon().

Цитата:

Цитата ShadowMas
как сделать ,что бы при ошибке скрипт не на паузу ставал а завершал работу по умолчанию »

А почему он должен на паузу вставать? Если речь про msgbox, то да, он блокирует выполнение скрипта, но никто не принуждает его использовать :)

beve 30-05-2009 01:06 1130703

Я так понял, что ты с помощью скрипта планируеш запуск Acronis и создавать резервную копию... Почему бы тебе не использовать встроенный в Acronis планировщик (Действие -->Создать новое задание и т.д.)? Если сделать так, то можно запланировать любое, задание, а потом выбрать режим запуска, который тебе подходит, или по времени, или по событию, единократно, или каждый день и т. д., или же выбрать режим запуска Вручную, а потом, когда это задание появится в списке заданий, то можеш с помощью скрипта, автоматом запустить Acronis, выбрать пункт Управление заданиями, и запустить на выполнение твое задание. Думаю так будет проще, и ошибок не будет...

ShadowMas 30-05-2009 21:29 1131217

Да нет вопрос в другом нужнео сделать условие выхода если вдруг скрипт по какимто причинам не сработал или появилось неожиданое окно!

Creat0R 30-05-2009 22:17 1131268

Цитата:

Цитата ShadowMas
нужнео сделать условие выхода если вдруг скрипт по какимто причинам не сработал или появилось неожиданое окно! »

Другими словами, если скрипт потерпел крах? Это не столь тривиально как кажется.

Есть такой модуль называется AutoItErrorHandler, может помочь отслеживать крах скрипта.

ShadowMas 30-05-2009 22:26 1131280

Ясно ну спасибо за участие думаю,чуть поменять условие и всё должно получиться!

Всем ещё раз огромное спасибо!!!

ShadowMas 31-05-2009 01:30 1131383

Всё люди я розобрался с условием :)

Вот рабочий код на автоматическое создание архива для 10-го Акрониса + проверка на случайную ошибку или сбой при установке, думаю так будет работать нормально :)

Код:

BlockInput(1)
DirCreate("D:\Test")
FileDelete("D:\Test\*.tib")
RegWrite('HKCU\SOFTWARE\Acronis\TrueImageHome\DontShow', 'IncrementalTip', 'REG_SZ', '1')
Run(@ProgramFilesDir & "\Acronis\TrueImageHome\TrueImage.exe")
WinWaitActive("Acronis*True*Image*Home")
Sleep(8000)
Send("{LALT}")
Send("{ENTER}")
Send("{ENTER}")
WinWaitActive("Мастер резервного копирования")
Send("{ENTER}")
WinWaitActive("Мастер резервного копирования")
Send("{ENTER}")
WinWaitActive("Мастер резервного копирования")
Send("{ENTER}")
Sleep(2000)
Send("{BS 25}")
Send("D:\Test\Образ.tib")
Send("{ENTER}")
WinExists("Мастер резервного копирования")
Sleep(1000)
Send("{ENTER}")
WinExists("Мастер резервного копирования")
Sleep(1000)
Send("{ENTER}")
WinExists("Мастер резервного копирования")
Sleep(1000)
ControlClick("Мастер резервного копирования", "", "FXWindow6")
WinWaitActive("Мастер резервного копирования")
ControlClick("Мастер резервного копирования", "", "FXWindow6")
Send("{ENTER}")
If WinActive("Acronis*True*Image*Home") Then
WinWait("Информация")       
Send("{ENTER}")
WinClose("Acronis*True*Image*Home")
RegDelete("HKCU\SOFTWARE\Acronis\TrueImageHome\DontShow")
BlockInput(0)
MsgBox(64, "Сообщение", "Запись успешно окончина!")
Else
BlockInput(0)       
MsgBox(64, "ОШИБКА ВЫПОЛНЕНИЯ", "Закройте все активные окна и попробуйте заново")
WinClose("Мастер резервного копирования")
WinClose("Acronis*True*Image*Home")
EndIf



Время: 16:55.

Время: 16:55.
© OSzone.net 2001-