Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » JPSoft Take Command | TCC (4DOS, 4NT)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
<#
Обновление TCC RT x86 и TCC RT x64 v24, версия 2019.01.31
Папка с TCC RT x86 расположена ..\TCCRT относительно скрипта (задаётся переменной $tcc32dir)
Папка с TCC RT x64 расположена ..\TCCRT64 относительно скрипта (задаётся переменной $tcc64dir)
В случае измения версии TCC RT, изменить адрес в переменной $setuplink
 
Параметры:
-NotCheck (сокращённо -NC) - не сравнивать даты, обновление будет проведено в любом случае
-NotDelete (сокращённо -ND) - после обновления не удалять инсталятор (tcc-rt.exe) и папку с распакованными файлами (имеет буквенно-цифровой вид типа C3175DD)
 
Особенности обновления:
- Так как на сайте версию иногда "забывают" обновить, обновление определяется по дате файла инсталятора. Дата последнего обновления храниться в самом скрипте в переменной $date1s.
- Инсталятор скачивается и распаковывается (запускается с ключом /extract).
- Распаковываются msi-файлы во временные папки.
- Из распакованных файлов удаляются все языковые файлы, кроме русского и английского, updater.exe, файлы txt.
- Состав файлов иногда меняется поэтому проверяются файлы в папке назначения и для "лишних" файлов exe, dll и tlb, отсутствующих в инсталяторе, выводиться сообщение "Extra: ..."
#>
 
param(
    [Parameter()] [Alias('NC')] [switch] $NotCheck,
    [Parameter()] [Alias('ND')] [switch] $NotDelete
)
 
$scriptfile = $MyInvocation.MyCommand.Path
$scriptdir = $MyInvocation.MyCommand.Path | Split-Path -Parent
$tcc32dir = "$scriptdir\..\TCCRT"
$tcc64dir = "$scriptdir\..\TCCRT64"
$setuplink = "https://jpsoft.com/downloads/v24/tcc-rt.exe"
$setupfile = [System.IO.Path]::GetFileName($setuplink)
 
# Строка $date1s перезаписывается при обновлении!!!
$date1s = "Mon, 28 Jan 2019 17:45:59 GMT"
$date1 = [datetime] 0
if ($date1s) { try { $date1 = [datetime]::ParseExact($date1s,"r",$null) } catch {} }
 
function UnpackMsi($msi,$sub,$dst) {
    $temp = [System.IO.Path]::GetDirectoryName($msi)
    Start-Process -Wait "msiexec.exe" -ArgumentList "/a",$msi,"/qb","TARGETDIR=$temp\$sub"
    if (Test-Path "$temp\$sub\32-bit") {
        Move-Item "$temp\$sub\32-bit\*" "$temp\$sub" -Force
        Remove-Item "$temp\$sub\32-bit" -Force
    }
    "*.msi","*.txt","french.dll","german.dll","italian.dll","spanish.dll","updater.exe" | foreach {
        Remove-Item (Join-Path "$temp\$sub" $_) -Force -EA Silent
    }
    Get-ChildItem "$temp\$sub" -File | foreach {
        $srcname = $_.Name.ToLower()
        $srcfile = $_.FullName
        if ($srcname -cne $_.Name) {
            # в нижний регистр
            Rename-Item $srcfile $srcname
        }
        Write-Host "Copy: $srcname"
        Copy-Item $srcfile $dst -Force
    }
    # Проверить наличие "лишних" файлов exe и dll
    Get-ChildItem -Lit $dst | where { ".exe",".dll" -contains $_.Extension } | foreach {
        if (-not (Test-Path (Join-Path "$temp\$sub" $_.Name))) {
            Write-Host "Extra: $($_.Name)"
        }
    }
}
 
Write-Host "TCCRT Update"
Write-Host "Check..."
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$web = Invoke-WebRequest $setuplink -Method Head
$date2s = $web.Headers["Last-Modified"]
$date2 = [datetime]::ParseExact($date2s,"r",$null)
 
Write-Host ("Previous setup date: "+$date1.DateTime)
#Write-Host ("Previous setup date: {0:yyyy-MM-dd HH:mm:ss}" -f $date1)
Write-Host ("New setup date: "+$date2.DateTime)
#Write-Host ("New setup date: {0:yyyy-MM-dd HH:mm:ss}" -f $date2)
 
Get-ChildItem -Lit $tcc64dir -Filter "*.log" -Recurse | Remove-Item -Force
Get-ChildItem -Lit $tcc32dir -Filter "*.log" -Recurse | Remove-Item -Force
 
if ($date2 -gt $date1 -or $NotCheck) {
    [string[]]$script = Get-Content $scriptfile
    for ($i=0;$i -lt $script.Length;$i++) {
        if ($script[$i] -match '^\$date1s\s*=') {
            $script[$i] = '$date1s = "'+$date2s+'"'
            break
        }
    }
    Set-Content $scriptfile $script -Enc UTF8
 
    Write-Host "Download $setuplink"
    $temp = $env:TEMP
    Set-Location $env:TEMP
    Invoke-WebRequest $setuplink -Out $setupfile
    Write-Host "Unpack..."
    Start-Process -Wait $setupfile -ArgumentList "/extract:$temp","/exenoupdates"
    Get-ChildItem "." -Dir | sort -Property LastWriteTime -Descending | foreach { # ищем новую папку созданную при распаковке
        $temp = $_.FullName
        if (Test-Path -Lit "$temp\tcc-rt.msi") {
            Write-Host "Temporary folder: $temp"
            Write-Host "Destination: $tcc32dir"
            UnpackMsi "$temp\tcc-rt.msi" "x86" $tcc32dir
            Write-Host "Destination: $tcc64dir"
            UnpackMsi "$temp\tcc-rt.x64.msi" "x64" $tcc64dir
            if (-not $NotDelete) {
                Remove-Item $setupfile
                Remove-Item $temp -Recurse -Force
            }
            break
        }
    }
}

Всего записей: 3213 | Зарегистр. 09-02-2003 | Отправлено: 12:25 23-11-2018 | Исправлено: Smitis, 20:31 14-04-2019
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » JPSoft Take Command | TCC (4DOS, 4NT)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru