Что нового

Обновление скрипта через интернет

CreatiK

Новичок
Сообщения
93
Репутация
4
Возможно ли реализовать обновление через интернет?
Например нажимаешь кнопку Проверить обновление, он отправляет запрос на сервер http://creatik.ucoz.org/ver.txt если версия программы не соответствует то вылазиет окно то что типо на сайте есть обновление и при нажатии на кнопку скачать он качает))
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
Делаю все как в этой теме http://autoit-script.ru/index.php?topic=1814.0
программа закрывается и высвечивается командная строка и все больше не каких действий
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
CreatiK, тяжеловато читать мысли на растоянии. Особенно в чужом коде )
Догадываюсь, что где то в этом участке кода проблемы:
Код:
Run(@ComSpec & ' /c Ping -n 2 localhost > nul & Move /y "' & _ 
            @TempDir & '\' & $sScript_Name & '" "' & @ScriptFullPath & '" & Start "" "' & @ScriptFullPath & '"', '', @SW_HIDE)


То, что программа закрывается - так и должно быть. Т.к. была скачанна новая версия, соответсвенно старая версия программы должны быть закрыта, что бы ее файл перезаписать новой версией.

А вот то, что отображается окошко коммандной строки, это ошибка. Покапайтесь в своем коде, что там с запускм BAT-файла обновления (пример выше). Может ошибки какие закрались.
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
Просто я делал как там простой скрипт
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include "Update.au3" ; обязательно нужно включить
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 210, 170, 309, 124)
$Button1 = GUICtrlCreateButton("Обновление", 40, 32, 129, 81)
$Current_Version = "1.0"
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			_StartCheckForUpdate("http://creatik.ucoz.org/ver.txt",$Current_Version,True)
	EndSwitch
WEnd


и в текстовике
Код:
[Info]
Update Version = 1.1
Update File = http://creatik.ucoz.org/AutoIt_v3_Script-2-.exe
Update Changes = Исправлены баги
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
CreatiK
Хмм....даа. Коль уж нет желание разбираться самому, то давайте гадать.

1) Попробуйте, что ли вот это:
Код:
Run(@ComSpec & ' /c ping -n 2 localhost>nul & Move /y "' & $FileInTempDir & '" "' & $FileInScriptDir & '" & Start "" "' & $FileInScriptDir & '"', '', @SW_HIDE)


заменить на такое:
Код:
Sleep(1000)
Run(@ComSpec & ' /c Move /y "' & $FileInTempDir & '" "' & $FileInScriptDir & '" & Start "" "' & $FileInScriptDir & '"', '', @SW_HIDE)


2) Изменить имя файла своего скрипта.

3) Изменить папку расположения своего скрипта.

3) Проверка обновления программы происходит на EXE файле скрипта?

4) Какая версия/разрядность операционной системы?

5) Проверить обновление с правами Администратора.

6) С папкой Temp все впорядке? Доступ на запись в нее есть?

7) А в не скриптом режим что отображается?
Код:
_StartCheckForUpdate("http://creatik.ucoz.org/ver.txt", $Current_Version, false)


....даже не знаю, что еще....может заварить зеленый чай вместо кофе? Или наоборот....
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
2)изменил на sss.exe не помогло
3)да
4)Win 7 Pro x32
5)Проверял
6)Доступ на запись как проверить?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Зайти в Temp папку и создать папку вручную.
Например для Win 7 x64 это папка:
Код:
%USERPROFILE%\AppData\Local\Temp

Если запускать обновление не в скрытом режиме, то какие сообщения?
И если изменить располжение скрипта, например в корень диска.
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
Доступ открыт в папку Temp
Вот
0ef3161e7eb6.jpg
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
CreatiK
Попробуй: _AppCheckUpdates.zip

P.S
Запускать MyApp.exe для проверки.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
CreatiK
Хотел бы я знать что это вообще за окно такое открывается.....у CMD даже значек иконки другой....
Если это окно процесса ntvdm.exe, то у вас явно запускается НЕ коммандная строка.

Может так попробуйте:
Код:
Run(@SystemDir & '\cmd.exe /c ping -n 2 localhost>nul & Move /y "' & $FileInTempDir & '" "' & $FileInScriptDir & '" & Start "" "' & $FileInScriptDir & '"', '', @SW_HIDE)
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
CreatoR сказал(а):
CreatiK
Попробуй: _AppCheckUpdates.zip

P.S
Запускать MyApp.exe для проверки.

Твой скрипт обновляется. У тебя dat файл на сервере лежит как мне создать такой же для своего сервера? чтобы сделать обновление
 

Dark-Side

Знающий
Сообщения
72
Репутация
17
Во всех своих программах обновление реализовано вот так:

Код:
#RequireAdmin ; подстраховка чтобы на win7 все стопроцентно сработало
Global $version = 1, $version_
Global $Web = "http://website.ru/Programs/Name/"


_CheckUpdate()


Func _CheckUpdate()
	Local $x, $Answer
	$x = InetGet ($Web & "update.ini", "update.ini")
	If $x = 0 Then
		MsgBox(16, "Error", "Server is not found")
	Else
		$version_ = IniRead("update.ini", "Settings", "Version", "error")
		If ($version <> $version_) Then
			$Answer = MsgBox(36, "Info", "New version is avabile. Do you want to download it?")
			If $Answer = 6 Then _Update()
		Else
			FileDelete ("update.ini")
			MsgBox(64, "Info", "You are using the latest version! :)")
		EndIf
	EndIf
EndFunc


Func _Update()
;~ IniWrite ("update.ini", "Settings", "Version", "0.4")
;~ IniWrite ("update.ini", "Settings", "Size", "473kb")
;~ IniWrite ("update.ini", "Settings", "Date", "12/06/09")

	Local $size, $date, $x
	$size = IniRead("update.ini", "Settings", "Size", "error")
	$date = IniRead("update.ini", "Settings", "Date", "error")
	FileDelete ("update.ini")
	MsgBox(64, "Info", "Information about new version:" & @CRLF & @CRLF & "Version: " & @TAB & $version_ & @CRLF & "Size: " & @TAB & $size & @CRLF & "Date: " & @TAB & $date )
	$x = InetGet($Web & "uploader.exe", @TempDir & "\" & "ProrgamName Uploader.exe")
	If $x = 0 Then
		MsgBox(16, "Error", "File is not found")
	Else	
		MsgBox(64, "Info", "File downloaded succsessfully. Starting update")
		Run(@TempDir & "\" & "ProrgamName Uploader.exe")
		Exit
	EndIf
EndFunc


Все легко и просто =) Скачиваешь аплоадер в временную папку, тот удаляет старую версию скрипта и скачивает новую. Я сделал обновление через аплодер для того чтобы предоставить пользователю информацию об изменениях в программе и иметь возможность редактировать вид как эту информацию предоставлять.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Makc
Makc сказал(а):
Run(@TempDir & "\" & "ProrgamName Uploader.exe")
А что мешает uploader вшить в основной скрипт и запускать его отдельным процессом для обновления?
Имею ввиду даже не FileInstall, а просто как функции и вызвать их запускам еще одной копии основного скрипта с ключами.
 

Dark-Side

Знающий
Сообщения
72
Репутация
17
Как я уже написал в своем сообщении, мне не нужен один шаблонный update, я постоянно изменяю его gui.
Если вам удобнее вшить его в программу - пожалуйста, ваше дело. Я писал для себя и вы пишите для себя :smile:
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Makc
Проблем нет. Я написал для интересу.
Потому что, в вашем варианте происходит разделение логики. Часть системы обновления будет в основной проге (проверка новой версии), и часть в проге обновления. Хотя это мелочь. И в таком подходе то же есть свои плюсы.
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
Всем спасибо разобрался. Пример помог CreatoR
 
Верх