<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Обновление скрипта]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11689&amp;type=atom" />
	<updated>2016-06-08T16:45:26Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11689</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104983#p104983" />
			<content type="html"><![CDATA[<p>По мотивам 5 поста, файл один, то есть сам скрипт. На github лежит текстовик, в нём прописано Version 2, и такой же Update.exe, но в котором Version := 2. Компилируем код ниже, имя скомпилированного файла может быть любое. Запускаем, смотрим в TrayTip текущую версию, соглашаемся обновить...<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#NoEnv
Version := 1

TrayTip, %A_ScriptName%, Текущая версия: %Version%

Loop %0%
	ComParam%A_Index% := %A_Index%

If ComParam1 = /Update
	Update(ComParam2, ComParam3)
Else If ComParam1 = /TempDelete
	TempDelete(ComParam2, ComParam3)
Else
	CheckUpdate(Version)
Return

CheckUpdate(Version) {
	Http := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;), Http.Option(6) := 0
	Http.Open(&quot;GET&quot;, &quot;https://raw.githubusercontent.com/serzh82saratov/Update/master/README.md&quot;)
	Http.Send(), Text := Http.ResponseText
	New := RegExReplace(Text, &quot;i).*?Version\s*(\d+)\s*&quot;, &quot;$1&quot;)
	If (New &lt;= Version)
		Return
	MsgBox, % 4+32+256, CheckUpdate, Есть новая версия, обновить с %Version% на %New%?
	IfMsgBox, No
		Return
	URLDownloadToFile, https://github.com/serzh82saratov/Update/blob/master/Update.exe?raw=true, %A_Temp%\Update.exe
	PID := DllCall(&quot;GetCurrentProcessId&quot;)
	Run %A_Temp%\Update.exe &quot;/Update&quot; &quot;%PID%&quot; &quot;%A_ScriptFullPath%&quot;
	ExitApp
}

Update(PID, Path) {
	Process, Close, %PID%
	Process, WaitClose, %PID%, 3
	If ErrorLevel
	{
		MsgBox, % 16, Update, Не удаётся закрыть процесс
		ExitApp
	}
	FileCopy, %A_ScriptFullPath%, %Path%, 1
	If ErrorLevel
	{
		MsgBox, % 16, Update, Не удалось копирование, возможно были запущены несколько экземпляров программы
		ExitApp
	}
	PID := DllCall(&quot;GetCurrentProcessId&quot;)
	Run %Path% &quot;/TempDelete&quot; &quot;%PID%&quot; &quot;%A_ScriptFullPath%&quot;
	ExitApp
}

TempDelete(PID, Path) {
	Process, Close, %PID%
	Process, WaitClose, %PID%, 2
	FileDelete, %Path%
}

Escape:: ExitApp
</code></pre></div><p>По совсем правильному надо добавить проверку чтобы в папке Temp не было такого же файла, и чтобы при закрытии процесса не было других копий.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-06-08T16:45:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104983#p104983</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104981#p104981" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>SeaVodikendu пишет:</cite><blockquote><div class="quotebox"><cite>mirapi пишет:</cite><blockquote><p>Но как удалить .exe файл если он еще используется?</p></blockquote></div><p>Мне тоже интересно.</p></blockquote></div><p>Мой скрипт работает так:<br />&gt; Пользователь запускает файл mvd.exe, идет проверка на обновление. Если есть новая версия и пользователь нажал &quot;Обновить&quot;, идет дальше:<br />&gt; С сервера скачивается 2 файла: mvd.exe и скрипт называет mvd2.exe и update.exe. <br />&gt; Скрипт запускает файл update и закрывает mvd. <br />&gt; Файл update удаляет файл mvd и переименовывает mvd2 в mvd. </p><p>Наверное можно как-то проще реализовать, но я сделал вот так)</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T16:32:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104981#p104981</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104980#p104980" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>mirapi пишет:</cite><blockquote><p>Но как удалить .exe файл если он еще используется?</p></blockquote></div><p>Мне тоже интересно.</p>]]></content>
			<author>
				<name><![CDATA[SeaVodikendu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33752</uri>
			</author>
			<updated>2016-06-08T16:28:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104980#p104980</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104976#p104976" />
			<content type="html"><![CDATA[<p>Проблему решил. Тему можно закрыть.</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T16:01:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104976#p104976</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104954#p104954" />
			<content type="html"><![CDATA[<p>Как я понял, мне нужно удалить вначале этот .exe файл и скачать на его место новый. Но как удалить .exe файл если он еще используется? <br />Т.е. FileDelete не работает на тот файл, которым вызвала эта команда.</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T13:54:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104954#p104954</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104953#p104953" />
			<content type="html"><![CDATA[<p>Сейчас вот как реализовал:</p><div class="codebox"><pre><code>
SetWorkingDir %A_ScriptDir%
#Include AHKBASE CU.ahk

url_version := &quot; &quot; ; Ссылка на файл проверки обновлений (там указываю версию скрипта)
script_version := 39 ; Версия вашего текущего скрипта.
last_version := JSON.Decode(GetLastVersionSoft(url_version)) ; Получение данных с сервиса проверки обновлений

if(last_version.status = &quot;success&quot;) { ; Данные о обновлении успешно получены
	if(script_version &lt; last_version.msg) 
	{ ; Есть новые обновления
		MsgBox, 68, Доступна новая версия скрипта, % &quot;Обнаруженая новая версия программы!`n`nВ новой версии:`n&quot; last_version.site &quot;`n`nТекущая версия: &quot; script_version &quot;`nВы хотите скачать новую версию?&quot; ; Показ диалогового окна с информацией о новой версии.
		IfMsgBox, Yes ; Если нажата кнопка YES выполняем действия ниже;
		{
			;Run % last_version.url ; Запустить ссылку которая указана на сайте для скачивания обновлений.
			URLDownloadToFile,ссылка/testupdate.ahk,testupdate.ahk 
			ExitApp ; Закрыть скрипт
		}
	}
} else if (last_version.status = &quot;error&quot;) { ; Ошибка при проверке обновлений
	MsgBox, 16, Ошибка, % &quot;Неудалось проверить наличие обновлений.`n`nКод ошибки: &quot; last_version.code &quot;`nТекст: &quot; last_version.msg &quot;&quot; ; Показ диалогового окна с информацией о ошибке.
}
</code></pre></div><p>Ссылка на инклуд: <br /><a href="https://yadi.sk/d/Otl1RLQcsMDqA">https://yadi.sk/d/Otl1RLQcsMDqA</a></p><p>При этом все работает только если скрипт не закомпилирован. Компилированный не хочет скачивать файл, почему-то.<br />Файл он скачивает, но не заменяет..</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T13:41:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104953#p104953</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104947#p104947" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br />Вы не могли бы это показать кодом? Буду очень благодарен, да и думаю другим эта тема пригодится.<br />С яндекс диском будут сложности, по этому можно и прямую ссылку на файл задавать.</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T13:04:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104947#p104947</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104946#p104946" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Nikva пишет:</cite><blockquote><p>В <a href="http://forum.script-coding.com/viewforum.php?id=2">коллекции скриптов</a>, есть <a href="http://forum.script-coding.com/viewtopic.php?pid=72459#p72459">скрипт <strong>serzh82saratov </strong></a>в котором реализовано, и проверка на наличие обновлений и само обновление.</p></blockquote></div><p>Там сказано что автоматическое обновление работает только в некомпилированном скрипте.</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T13:03:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104946#p104946</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104936#p104936" />
			<content type="html"><![CDATA[<p>Раз уже все начали отвечать в неправильно оформленной теме, то я продолжу.<br /><strong>Nikva</strong> там про некомпилированный скрипт, и идёт просто замена текста в уже запущенном скрипте, и далее его перезапуск. Со скомпилированным всё по другому.</p><ul><li><p>Качаем файл в другую папку (можно и в эту же, если имена предопределены)</p></li><li><p>Запускаем его с определённым параметром, вторым параметром передаём PID, третьим путь к оригинальному файлу</p></li><li><p>Закрываем процесс, ждём закрытия</p></li><li><p>Копируем скачанный с перезаписью оригинального</p></li><li><p>Запускаем оригинальный перезаписанный с определённым параметром, вторым параметром передаём PID, третьим путь к скачанному файлу</p></li><li><p>Закрываем процесс, ждём закрытия</p></li><li><p>Удаляем скачанный файл</p></li><li><p>Новая версия продолжает свою работу</p></li></ul>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-06-08T10:54:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104936#p104936</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104934#p104934" />
			<content type="html"><![CDATA[<p>В <a href="http://forum.script-coding.com/viewforum.php?id=2">коллекции скриптов</a>, есть <a href="http://forum.script-coding.com/viewtopic.php?pid=72459#p72459">скрипт <strong>serzh82saratov </strong></a>в котором реализовано, и проверка на наличие обновлений и само обновление.</p>]]></content>
			<author>
				<name><![CDATA[Nikva]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27416</uri>
			</author>
			<updated>2016-06-08T10:48:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104934#p104934</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104933#p104933" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>(вероятно, страница Яндекс.Диска для этого не подойдёт, т.к. файл (или текст кода) скрипта должны быть доступны по прямой ссылке</p></blockquote></div><p>Подойдет, если через Yandex API.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2016-06-08T10:48:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104933#p104933</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104931#p104931" />
			<content type="html"><![CDATA[<p>Да, можно.<br />1. UrlDownloadToFile на страницу где указана последняя вышедшая версия.<br />2. FileRead скачанный файл в переменную.<br />3. Сравнить текущую версию скрипта с последней вышедшей.<br />4. Если не равны - UrlDownloadToFile на страницу с кодом скрипта (вероятно, страница Яндекс.Диска для этого не подойдёт, т.к. файл (или текст кода) скрипта должны быть доступны по прямой ссылке).</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2016-06-08T10:32:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104931#p104931</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Обновление скрипта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104925#p104925" />
			<content type="html"><![CDATA[<p><strong>Доброго времени суток</strong>! </p><p>Я разработчик одного из скриптов для игры, к которому регулярно выпускаю обновления. Сейчас в сам скрипт встроена система проверки обновления через php. Если обновление есть - напишет что нового и предложит скачать. Пользователя перенаправляет на &quot;Яндекс диск&quot; и ему нужно самостоятельно скачивать новый файл и заменять старый. <br />Да, вроде как для пользователя действий не много, но хотел-бы узнать, можно ли автоматизировать этот процесс скачивания? </p><p>т.е. я бы хотел:</p><p>Я в файле на сайте помечаю что вышла новая версия и пишу что в ней нового (как и сейчас), после чего пользователь нажимает на &quot;Обновить&quot;, и .exe файл автоматически скачивается в папку с скриптом. Если есть такое, поделитесь кодом, буду очень благодарен.</p>]]></content>
			<author>
				<name><![CDATA[mirapi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33933</uri>
			</author>
			<updated>2016-06-08T08:49:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104925#p104925</id>
		</entry>
</feed>
