Что нового

[Автоматизация] Скрипт установки скомпилированный в ехе не работает как надо на ПК в сети.

edware

Новичок
Сообщения
3
Репутация
0
Здравствуйте! Столкнулся с такой проблемой - Написал скрипт и скомпилил его в ехе. При запуске на моей машине всё работает как надо т.е. запускается программа и устанавливается, все клики срабатывают. При запуске на компьютерах в сети программа установки запускается, но кликов на кнопках не происходит, всё висит и ждёт когда кликнешь по кнопке мышкой. Вначале подумал, что на машинах отсытствует программа sleep, скопировал её на компы в system32, но результат тот же. Подскажите куда копать и в чём может быть проблема?
Вот код скрипта:
Код:
Opt("WinWaitDelay",1000)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)


Run('\\Полный путь на сетевую папку\InputSetup.exe')

;***If WinWaitActive("[TITLE:Установка ПП ""Блок ввода исходных данных"" 11.3; Visible Text:Установка программного продукта серии ""Аналитик"" ""Блок ввода исходных данных"" на Ваш компьютер. По всем техническим вопросам обращаться в cлужбу технической поддержки фирмы ИНЭК. Тел. ((495))786-22-30((доб.1119)), e-mail [email protected] ПП ""Блок ввода исходных данных"" 11.3]", "") Then
	If WinWaitActive("[TITLE:Установка ПП ""Блок ввода исходных данных"" 11.3]", "", 5) Then
 	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка программно")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Программа установки ")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка ПП Серии """)
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Готово','Button4')
	EndIf
;***Else
	If WinWaitActive("[TITLE:Подтверждение удаления файла]", "", 5) Then
	_WinWaitActivate("Подтверждение удаления файла","Удалить выбранное пр")
	ControlClick("Подтверждение удаления файла",'ОК','Button1')
	_WinWaitActivate("InstallShield Wizard","Программа InstallShi")
	ControlClick("InstallShield Wizard",'Готово','Button4')
	Sleep(3000)
	Run('\\Полный путь на сетевую папку\InputSetup.exe')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка программно")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Программа установки ")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка ПП Серии """)
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Готово','Button4')
EndIf

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc
P.S. Версия AutoIt у меня 2.27
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
операционные системы разные?
да, и версию нужно срочно сменить
 
Автор
E

edware

Новичок
Сообщения
3
Репутация
0
Нет, версии ОС одинаковые, на всех WindowsXP SP3. По поводу версии AutoIt возможно, но скорее всего не в этом дело т.к. такие же скомпиленные скрипты, для установки конфигураций 1С, работают нормально, сделаные в этой же версии AutoIt.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
edware
В InstallShield часто бывает так, что окно уже активно, а кнопка ещё недоступна. На глаз это не заметно, но AutoIt "кликает" по заблокированной кнопке.
Попробуйте дожидаться активности кнопок
Код:
While Not ControlCommand("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1', "IsEnabled")
  Sleep(10)
WEnd
 
Автор
E

edware

Новичок
Сообщения
3
Репутация
0
Здравствуйте! InnI попробовал Ваш совет и он помог, почти. Я заметил такую особенность, там где программа запускается быстро (быстро появляется её окно), всё стало работать, скрипт отрабатывает, а там где долго запускается, там не отрабатывает, зависает как всегда. Поигрался с местом расположения Вашего кода в моём и со временем задержки, не помогло. Но заметил ещё одну вещь, если был долгий запуск и скрипт не отработал, если закрыть программу и тут же снова запустить скрипт, программа быстро запускается (видимо из кэша или чегото подобного, потому, что практически моментально) и скрипт при этом отрабатывает. Это меня натолкнуло на мысль добавить SLEEP после RUN, и тогда всё заработало. Я решил попробовать сделать также и в своём старом скрипте, и он тоже стал нормально работать. Теперь у меня есть два скрипта, один с ожиданием активности кнопки:
Код:
Opt("WinWaitDelay",2000)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)


Run('\\Полный путь на сетевую папку\InputSetup.exe')
Sleep(3000)
;~ While Not ControlCommand("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1', "IsEnabled")
;~   Sleep(10)
;~ WEnd

;***If WinWaitActive("[TITLE:Установка ПП ""Блок ввода исходных данных"" 11.3; Visible Text:Установка программного продукта серии ""Аналитик"" ""Блок ввода исходных данных"" на Ваш компьютер. По всем техническим вопросам обращаться в cлужбу технической поддержки фирмы ИНЭК. Тел. ((495))786-22-30((доб.1119)), e-mail [email protected] ПП ""Блок ввода исходных данных"" 11.3]", "") Then
	If WinWaitActive("[TITLE:Установка ПП ""Блок ввода исходных данных"" 11.3]", "", 5) Then

 	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка программно")
		While Not ControlCommand("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1', "IsEnabled")
			Sleep(5)
		WEnd
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Программа установки ")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка ПП Серии """)
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Готово','Button4')
	EndIf
;***Else
	If WinWaitActive("[TITLE:Подтверждение удаления файла]", "", 5) Then

	_WinWaitActivate("Подтверждение удаления файла","Удалить выбранное пр")
		While Not ControlCommand("Подтверждение удаления файла",'ОК','Button1', "IsEnabled")
			Sleep(5)
		WEnd
	ControlClick("Подтверждение удаления файла",'ОК','Button1')
	_WinWaitActivate("InstallShield Wizard","Программа InstallShi")
	ControlClick("InstallShield Wizard",'Готово','Button4')
	Sleep(3000)
	Run('\\Полный путь на сетевую папку\InputSetup.exe')
	Sleep(3000)
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка программно")
		While Not ControlCommand("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1', "IsEnabled")
			Sleep(5)
		WEnd
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Программа установки ")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка ПП Серии """)
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Готово','Button4')
EndIf

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc
И мой старый, без ожидания кнопки:
Код:
Opt("WinWaitDelay",1000)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)


Run('\\Полный путь на сетевую папку\InputSetup.exe')
Sleep(3000)
;***If WinWaitActive("[TITLE:Установка ПП ""Блок ввода исходных данных"" 11.3; Visible Text:Установка программного продукта серии ""Аналитик"" ""Блок ввода исходных данных"" на Ваш компьютер. По всем техническим вопросам обращаться в cлужбу технической поддержки фирмы ИНЭК. Тел. ((495))786-22-30((доб.1119)), e-mail [email protected] ПП ""Блок ввода исходных данных"" 11.3]", "") Then
	If WinWaitActive("[TITLE:Установка ПП ""Блок ввода исходных данных"" 11.3]", "", 5) Then
 	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка программно")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Программа установки ")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка ПП Серии """)
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Готово','Button4')
	EndIf
;***Else
	If WinWaitActive("[TITLE:Подтверждение удаления файла]", "", 5) Then
	_WinWaitActivate("Подтверждение удаления файла","Удалить выбранное пр")
	ControlClick("Подтверждение удаления файла",'ОК','Button1')
	_WinWaitActivate("InstallShield Wizard","Программа InstallShi")
	ControlClick("InstallShield Wizard",'Готово','Button4')
	Sleep(3000)
	Run('\\Полный путь на сетевую папку\InputSetup.exe')
	Sleep(3000)
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка программно")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Программа установки ")
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Далее >','Button1')
	_WinWaitActivate("Установка ПП ""Блок ввода исходных данных"" 11.3","Установка ПП Серии """)
	ControlClick("Установка ПП ""Блок ввода исходных данных"" 11.3",'Готово','Button4')
EndIf

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc
Оба варианта отлично работают. Написал всё это на тот случай если у кого нибудь возникнет такая же проблема. Всем большое спасибо! Особенно InnI!
 
Верх