<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Обновление скрипта]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=11689</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11689&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Обновление скрипта».]]></description>
		<lastBuildDate>Wed, 08 Jun 2016 16:45:26 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104983#p104983</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 08 Jun 2016 16:45:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104983#p104983</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104981#p104981</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 16:32:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104981#p104981</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104980#p104980</link>
			<description><![CDATA[<div class="quotebox"><cite>mirapi пишет:</cite><blockquote><p>Но как удалить .exe файл если он еще используется?</p></blockquote></div><p>Мне тоже интересно.</p>]]></description>
			<author><![CDATA[null@example.com (SeaVodikendu)]]></author>
			<pubDate>Wed, 08 Jun 2016 16:28:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104980#p104980</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104976#p104976</link>
			<description><![CDATA[<p>Проблему решил. Тему можно закрыть.</p>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 16:01:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104976#p104976</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104954#p104954</link>
			<description><![CDATA[<p>Как я понял, мне нужно удалить вначале этот .exe файл и скачать на его место новый. Но как удалить .exe файл если он еще используется? <br />Т.е. FileDelete не работает на тот файл, которым вызвала эта команда.</p>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 13:54:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104954#p104954</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104953#p104953</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 13:41:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104953#p104953</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104947#p104947</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Вы не могли бы это показать кодом? Буду очень благодарен, да и думаю другим эта тема пригодится.<br />С яндекс диском будут сложности, по этому можно и прямую ссылку на файл задавать.</p>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 13:04:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104947#p104947</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104946#p104946</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 13:03:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104946#p104946</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104936#p104936</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 08 Jun 2016 10:54:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104936#p104936</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104934#p104934</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Nikva)]]></author>
			<pubDate>Wed, 08 Jun 2016 10:48:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104934#p104934</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104933#p104933</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>(вероятно, страница Яндекс.Диска для этого не подойдёт, т.к. файл (или текст кода) скрипта должны быть доступны по прямой ссылке</p></blockquote></div><p>Подойдет, если через Yandex API.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 08 Jun 2016 10:48:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104933#p104933</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104931#p104931</link>
			<description><![CDATA[<p>Да, можно.<br />1. UrlDownloadToFile на страницу где указана последняя вышедшая версия.<br />2. FileRead скачанный файл в переменную.<br />3. Сравнить текущую версию скрипта с последней вышедшей.<br />4. Если не равны - UrlDownloadToFile на страницу с кодом скрипта (вероятно, страница Яндекс.Диска для этого не подойдёт, т.к. файл (или текст кода) скрипта должны быть доступны по прямой ссылке).</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Wed, 08 Jun 2016 10:32:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104931#p104931</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Обновление скрипта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=104925#p104925</link>
			<description><![CDATA[<p><strong>Доброго времени суток</strong>! </p><p>Я разработчик одного из скриптов для игры, к которому регулярно выпускаю обновления. Сейчас в сам скрипт встроена система проверки обновления через php. Если обновление есть - напишет что нового и предложит скачать. Пользователя перенаправляет на &quot;Яндекс диск&quot; и ему нужно самостоятельно скачивать новый файл и заменять старый. <br />Да, вроде как для пользователя действий не много, но хотел-бы узнать, можно ли автоматизировать этот процесс скачивания? </p><p>т.е. я бы хотел:</p><p>Я в файле на сайте помечаю что вышла новая версия и пишу что в ней нового (как и сейчас), после чего пользователь нажимает на &quot;Обновить&quot;, и .exe файл автоматически скачивается в папку с скриптом. Если есть такое, поделитесь кодом, буду очень благодарен.</p>]]></description>
			<author><![CDATA[null@example.com (mirapi)]]></author>
			<pubDate>Wed, 08 Jun 2016 08:49:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=104925#p104925</guid>
		</item>
	</channel>
</rss>
