AutoIt:3.2.14.2
Версия:1.0
Категория:Автоматизация, Сеть
Описание:
При запуске считывает настройки FTP из файла конфигурации, который расположен по адресу @ScriptDir & "\..\config.ini" (на уровень выше скрипта, предположительно в корне основной программы). соединение с ftp сервером происходит в пассивном режиме, поэтому не возникает конфликтов с антивирусами.
пример ini файла
После установки соединения, происходит выгрузка всех файлов с подпапками в каталог на уровень выше от расположения скрипта(где находится файл с конфигурацией)
В процессе копирование идет отображение состояния копирования каждого файла и именем копируемого файла для информирования пользователя.
скрипт принимает один параметр - это путь к программе, которую необходимо запустить после обновления, например
D:\myProg\Updater>updater.exe d:\myProg\myProg.exe
если параметр отсутствует, то скрипт просто скачает обновление и закроется
Использование:
Запуск основной программы->
проверка наличия новой версии->
закрытие основной программы->
запуск данного скрипта с параметром->
после обновления скрипт закрывается и запускает обновленную (указанную в параметре) программу
весь процесс проверки обновления переложен на основную программу для корректной отработки закрытия программы и проверки новой версии в процессе работы.
Полезная информация
если графический интерфейс не требуется, то просто закоментируйте строку 39 GUISetState(@SW_SHOW)
в строках 59-63 в командах IniRead, третий параметр - это значение по умолчанию, на случай, если отсутствует ini файл
в строке 12 указан путь к ini файлу
функция dwnldFIles рекурсивно вызывается для скачивания во всех вложенных папках
Версия:1.0
Категория:Автоматизация, Сеть
Описание:
При запуске считывает настройки FTP из файла конфигурации, который расположен по адресу @ScriptDir & "\..\config.ini" (на уровень выше скрипта, предположительно в корне основной программы). соединение с ftp сервером происходит в пассивном режиме, поэтому не возникает конфликтов с антивирусами.
пример ini файла
[URLUpdate]
IP=192.168.10.50 #IP адрес сервера
port=21 #используемый порт
ftpLogin=user #логин
ftpPass=password #пароль
ftpPath=/update/MyProg3/ #папка с новой версией, расположенной на сервере
IP=192.168.10.50 #IP адрес сервера
port=21 #используемый порт
ftpLogin=user #логин
ftpPass=password #пароль
ftpPath=/update/MyProg3/ #папка с новой версией, расположенной на сервере
После установки соединения, происходит выгрузка всех файлов с подпапками в каталог на уровень выше от расположения скрипта(где находится файл с конфигурацией)
В процессе копирование идет отображение состояния копирования каждого файла и именем копируемого файла для информирования пользователя.
скрипт принимает один параметр - это путь к программе, которую необходимо запустить после обновления, например
D:\myProg\Updater>updater.exe d:\myProg\myProg.exe
если параметр отсутствует, то скрипт просто скачает обновление и закроется
Использование:
Запуск основной программы->
проверка наличия новой версии->
закрытие основной программы->
запуск данного скрипта с параметром->
после обновления скрипт закрывается и запускает обновленную (указанную в параметре) программу
весь процесс проверки обновления переложен на основную программу для корректной отработки закрытия программы и проверки новой версии в процессе работы.
Полезная информация
если графический интерфейс не требуется, то просто закоментируйте строку 39 GUISetState(@SW_SHOW)
в строках 59-63 в командах IniRead, третий параметр - это значение по умолчанию, на случай, если отсутствует ini файл
в строке 12 указан путь к ini файлу
функция dwnldFIles рекурсивно вызывается для скачивания во всех вложенных папках
Код:
#include <GuiConstantsEx.au3>
#include <FTPEx.au3>
#include <Array.au3>
$PIDs = ProcessList(@ScriptName) ;Возвращает двумерный массив, содержащий список выполняемых процессов (имя и PID).
if $PIDs[0][0] >= 2 then Exit 1 ;если процесс запущен, то выйти
Opt("GUIOnEventMode", 1) ; Включает режим OnEvent
Opt("TrayIconHide", 1) ;спрятать иконку в трее
Global $pathToConfFile = @ScriptDir & "\..\config.ini"
Global $ftpOpen = _FTP_Open('MyFTP')
Global $ftpConn
Global $sPath
#Region GUI
Local $iGUIWidth = 230, $iGUIHeight = 80
GUICreate("Автообновление", $iGUIWidth, $iGUIHeight)
GUISetIcon(@ScriptFullPath, 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$lCurrentWork = GUICtrlCreateLabel("Инициализация", 15, 15, 200, 20) ;текст
$bProgressBar = GUICtrlCreateProgress(15, 40, 200, 20) ;прогресс бар
Func CLOSEClicked()
Exit
EndFunc
#EndRegion
#Region GUI MESSAGE LOOP
GUISetState(@SW_SHOW)
Sleep(500)
FTPconn() ;соединение
Sleep(500)
dwnldFIles($sPath) ;скачивание файлов
GUICtrlSetData ($lCurrentWork, "Закрытие сессии")
_FTP_Close($ftpConn)
_FTP_Close($ftpOpen)
If $CmdLine[0] = 0 Then Exit ;если просто запущена
Run($CmdLine[1]) ;запуск программы после отработки обновления
GUIDelete()
#EndRegion GUI MESSAGE LOOP
#Region funcs
Func FTPconn()
$sServer = IniRead($pathToConfFile,"ftpUpdate", "IP", "127.0.0.1") ;получить IP сервера, если нет, то выставить по умолчанию
$sPort = IniRead($pathToConfFile,"ftpUpdate", "port", "21") ;получить IP сервера, если нет, то выставить по умолчанию
$sUsername = IniRead($pathToConfFile,"ftpUpdate", "ftpLogin", "user") ;логин ФТП
$sPass = IniRead($pathToConfFile,"ftpUpdate", "ftpPass", "password") ;пароль ФТП
$sPath = IniRead($pathToConfFile,"ftpUpdate", "ftpPath", "/") ;путь для получения обновлений
$ftpConn = _FTP_Connect($ftpOpen, $sServer, $sUsername, $sPass, 1, $sPort) ;открыть соединение
If @error Then
GUICtrlSetData ($lCurrentWork, "Ошибка:" & @error)
Else
GUICtrlSetData ($lCurrentWork, "Связь установлена")
EndIf
EndFunc
Func dwnldFIles($curDir)
_FTP_DirSetCurrent ($ftpConn, $curDir) ;присвоить указатель на текущую папку для работы с фтп
Local $aFile = _FTP_ListToArray($ftpConn, 2) ;получить список файлов из текущей папки
for $i = 1 to $aFile[0] ;прогнать весь массив файлов
GUICtrlSetData ($lCurrentWork, "Скачивание файла: " & $aFile[$i])
$destFoldef = StringReplace($curDir & '/', $sPath, '') ;сначала отрезаем путь до нужной нам папки
$destFoldef = StringReplace($destFoldef, '/', '\') ;меняем все косые на обратные
DirCreate (@ScriptDir & "\..\" & $destFoldef) ;если папки не сущетвует, то создаем
_FTP_ProgressDownload($ftpConn, @ScriptDir & "\..\" & $destFoldef & $aFile[$i], $curDir & "/" & $aFile[$i], UpdateGUIProgressBar) ;копируем файл с отображением состояния
Next
;ищем подпапки
Local $aDir = _FTP_ListToArray($ftpConn, 1) ;выбираем массив папок
for $i = 1 to $aDir[0]
dwnldFIles($curDir & "/" & $aDir[$i]) ;повторяем всю процедуру для найденных папок
Next
EndFunc
Func UpdateGUIProgressBar($iPercent)
GUICtrlSetData($bProgressBar, $iPercent)
Return 1
EndFunc ;==>_UpdateGUIProgressBar
#EndRegion