Что нового

Функция FileGetShortName не работает должным образом

Автор
L

lastangel

Новичок
Сообщения
39
Репутация
0
joiner
имеется виду замену самого себя, грубо говоря автоапдейт...Сам себя он не заменит, так как он запущен
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
lastangel
честно говоря, сложно найти решение если не видишь полной задачи. зачем менять скрипт? можно использовать ini файл для обновления информации.
может изначально изменить подход к задаче и не привлекать системные утилиты.
 
Автор
L

lastangel

Новичок
Сообщения
39
Репутация
0
joiner
Задача: функция, которая обновляла бы скрипт...
1. Сравнить версию в Update.ini с версией скрипта FileGetVersion(@AutoItExe)
2. Если версии не совпадают, тогда вызвать функцию загрузки обновления
3. Функция загружает новый файл, создаёт батник, запускает батник и выходит
4. Батник в свою очередь перемещает скачанный обновленный скрипт на место старого и запускает его
В итоге: мы получили обновленную версию нашей программки
Буду рад услышать другие идеи :smile:
Пример:
Код:
#include-once
#include <F:\Google Диск\Desktop\AUTOIT\include\IniString.au3>

Func _Update($iniurl, $fileurl)
	If Not @Compiled Then Return
	Local $ver = FileGetVersion(@AutoItExe)
	Local $ini = InetRead($iniurl, 1)
	Local $comp_ini = BinaryToString($ini)
	Local $sSection = "VERSION"
	Local $sKey = "VER"
	Local $inikey = _IniString_Read($comp_ini, $sSection, $sKey)
	If $ver = $inikey Then
		Return
	Else
		_DownloadNewVerion($fileurl)
	EndIf
EndFunc   ;==>_Update

Func _DownloadNewVerion($fileurl)
	$FileInTempDir = @TempDir & '\123.exe'
    Local $hInet = InetGet($fileurl,$FileInTempDir,1)
						If @error Then
							InetClose($hInet)
							Return
						EndIf
    InetClose($hInet)
	$sTemp = @TempDir & '\2s06w\sys.bat'
	DirCreate(@TempDir & '\2s06w')
	If FileExists($sTemp) Then FileDelete($sTemp)
	$sPath = FileGetShortName(@ScriptFullPath)
	FileWriteLine($sTemp, 'chcp 1251' &@CRLF _
	&'ping -n 3 127.0.0.1 > nul ' &@CRLF _
	& 'move /y "'&$FileInTempDir&'" "'&$sPath&'"' &@CRLF _
	& '"'&$sPath&'"' &@CRLF _
	& 'rmdir /s /q "'& @TempDir & '\2s06w' &'"')
	Run($sTemp, '', @SW_HIDE)
	Exit
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
файл программы включает в себя другой файл, который загружает обновленную версию программы, меняет, запускает ее и самуничтожается
такое решение как?
 
Автор
L

lastangel

Новичок
Сообщения
39
Репутация
0
joiner
То есть еще один рядом лежащий скрипт, который обновлял бы?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
lastangel [?]
То есть еще один рядом лежащий скрипт, который обновлял бы?
как в любой программе. есть модуль для апдейта.
и кстати. проверил код
Код:
ConsoleWrite(FileGetShortName("F:\soft\разное\ПК\1.txt"))

на семерке и восьмерке я получил одинаковый результат
Код:
F:\soft\9A31~1\90C5~1\1.txt
 
Верх