Что нового

[Автоматизация] Проблема с обновлением скрипта.

akoulev

Новичок
Сообщения
169
Репутация
2
Дано: есть скрипт, давно, регулярно и плодотворно работающий; изначально - с одной и той же машины ("базовой" машины, она же "машина-1"). Беспроблемно.
Со временем, потребовалась возможность запуска этого скрипта с двух машин, весьма различных как по конфигурации железа, так и по набору используемого пользовательского софта. (OS - одинкова: WXP SP3)
На "базовой" машине периодически происходит доработка скрипта; => обновление версии оного скрипта на второй машине хотелось бы автоматизировать. Для этого новые версии ('.au3' и '.exe') выкладываются, по мере появления, с машины-1 на сервер; при запуске скрипта на машине-2 проходит проверка номера версии и, при несовпадении версий - копирование файлов с сервера на машину-2.
Проблема в том, что на 2-й машине работает скомпилированный файл. Соответственно, когда проходит команда скопировать файл скрипта:
Код:
FileCopy($Prtbl_Dir & "\" & $NameOnly & ".exe" , @ScriptDir & "\" & $NameOnly & ".exe",1)
, - в этот момент сделать это не представляется возможным, поскольку exe-шник запущен; файл '.au3', при этом, копируется:
Код:
FileCopy($Prtbl_Src, $ScrptName,1)
, без каких-либо проблем.

Вопрос: как оптимально организовать на 2-й машине замену старого exe-шника на новый?
Ай нид хелп, плиз! :smile:


PS: Есть мыслишки насчёт "updater.exe", который будет запускаться из основного скрипта, дожидаться его остановки - и, далее, осуществлять копирование - после которого запускать новую версию основного скрипта, после чего завершаться (а то и удаляться) самому; - ну а попроще это всё никак не делается? Подтолкните меня, pls, - куда копать?
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
Как сделать правильно "по Большой Науке", я так и не узнамши; а вот как щас работает: 'по-пролетарски', cиречь 'на коленке':
Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         AKoulev

 Script Function:
	123_updater - AutoIt script. Для Витькиной машины.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
Sleep(4444); расписать с PID-ами!
Global $NameOnly="Анализатор_загрузки_Трёх_Хитрых_Шелезяк_1_2_3_telnet"; .au3
Global $Prtbl_Dir= "M:\МMM\Buh\Nortel\AutoIt3\Три_Хитрые_Шелезяки" ; задаём $Portable_Source для портируемости
FileCopy($Prtbl_Dir & "\" & $NameOnly & ".exe" , @ScriptDir & "\" & $NameOnly & ".exe",1)
;MsgBox(0, "Результат:",  "Копирование новой версии файлов с сервера завершено." & @CR & @CR & "                        Запустите скрипт заново!!!" , 3)
Run(@ScriptDir & "\" & $NameOnly & ".exe")
;IniWrite ( "C:\Temp\TMP.ini", "3JEL_Ver", "Version", $ver_tut ); Это вставлено в перезапускаемый скрипт - так луЧЧе! И правильнее.
Exit


Func _PID(); собственно процессы здесь не катят: процесс зовётся AutoIt3.exe
	; Написать ибн скопировать!
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Можно скопировать файл с другим именем, закрыть исполняемый exe'шник, и запустить команду перемещения файла (можно через @ComSpec), а потом снова запустить exe.
 
Верх