virjokk
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: <# : Сохранять в UTF8 без BOM с расширением .CMD @echo off set "cmdcmdfile=%~f0" %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -nol -nop -ex bypass -c ^ "&{[ScriptBlock]::Create((gc -lit $env:cmdcmdfile -enc 'UTF8') -join [Char]10).Invoke('%~dp0 %*')}" if not %errorlevel% EQU 0 ( %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -nol -nop -ex bypass -c "Uninstall-Module -Name 7zip4powershell -Force" ) exit /b #> $EEPath = "" # Путь установки 360EE. Можно указать в комстроке как параметр, что будет # приоритетнее, чем здесь. По умолчанию - каталог, где находится скрипт. # Структура каталогов - .\360chrome\Chrome\application. # Всю эту структуру указывать не нужно (хотя можно), достаточно, к примеру, так: "C:\MySoft". # Полный путь установки в этом случае будет: C:\MySoft\360chrome\Chrome\application. $CutDistr = "1" # Варианты урезания дистрибутива (0,1,2).Вариант по умолчанию "1" взят из шапки темы по ссылке # "Создание русифицированной портабельной версии с нуля". Вариант "2" от Dschinghis Khan # содержит абсолютный минимум необходмых для работы файлов - взят по ссылке # тоже из шапки .Оба варианта легко изменить в коде данного скрипта, # скорректировав содержимое переменной $DistrExclude. # При значении 0 дистр не будет урезан, все ставится как есть. $Rus = $true # Скачать и установить русификатор от WatsonRus. По умолчанию - да ($true). # Если $false, не будет ни скачиваться, ни устанавливаться. $PatchWS = $true # Скачать и применить патч для изменения магазина и поисковика на родной от Google # Если не нужен, поставить $false. $CreateBackup = $false # Бэкап текущей версии 360EE при обновлении. Делать - $true, нет - $false. # В zip-архив пакуются: каталог, имя которого совпадает с номером версии 360EE, # каталог User Data, а также исполняемый файл 360chrome.exe $DelTemp = $true # Удалить временную папку со скачанными файлами (дистр, русик, патч и т. д.). # Она создается в системной папке %TEMP% с именем 360EE + случайный набор цифр # По умолчанию да - $true $CreateLoader = $true # Создать в папке установки батник для запуска 360EE - некое подобие лоадера с # ключами запуска, чисткой профиля и реестра. Содержимое батника опять же # легко скорректировать изменением переменной $LoaderContent $CreateShortcut = $true # Создать ярлык на рабочем столе к лоадеру. Создается, если $CreateLoader тоже $true. # Имеет смысл, если дистр не планируется перемещать в другую папку. # Запуск с этого ярлыка скрывает cmd-окно при старте лоадера, чтоб не маячило. # При обновлении, если уже имеется (пусть и с другим именем), заново не создается. # Код скрипта # Чтение аргументов из батника в переменную $cmdargs = $args -split " " # Определение пути установки и разрешение его правильности. $StartDir = $cmdargs[0].TrimEnd("\") if ($cmdargs[1]) {$EEPath = $cmdargs[1]} if (!($EEPath)) {$EEPath = $StartDir} if (Test-Path -Path $EEPath -PathType Container) { if (!($EEPath -match "\\360chrome\\chrome\\application$")) { $EEPath = Join-Path -Path $EEPath -ChildPath "360chrome\Chrome\application" } } else { Write-Host -ForeGroundColor Red "Неправильный путь" exit } # Ссылки на официальный сайт и форум ru-board с темой 360EE $url_offsite = "https://browser.360.cn/ee/en.html" $url_alltop360 = "http://forum.ru-board.com/forum.cgi?forum=5&action=filter&filterby=topictitle" + "&word=360+extreme+explorer&sorting=yes&sortby=topicdate&sort=ascend" $url_printver = "http://forum.ru-board.com/misc.cgi?action=printtopic&forum=5&topic=" # Определение последней версии и линейки через разбор ссылки на дистрибутив 360EE с официального сайта. # Способ не лишен недостатков, но лучше пока не придумал. Скачивать целиком 360cse_official.exe # только чтобы посмотреть версию - не комильфо. К тому же, это релиз, а надо учитывать и бету. $offsite = Invoke-WebRequest -Uri $url_offsite $LastVer = [version[]]($offsite.links.href | ?{$_ -match "([\d\.]+)\.exe"} | %{$matches[1]}) | sort | Select -Last 1 $LastVerMajor = ([version]$LastVer).Major if (!($LastVer)) { Write-Host -ForeGroundColor Red "Не удалось определить текущую версию 360EE" exit } # Определение установленной версии и сравнение с версией на сайте (при обновлении) $CurVer = [version](gi $EEPath\360chrome.exe -ErrorAction SilentlyContinue).VersionInfo.ProductVersion if (!($CurVer)) {$CurVer = "0.0.0.0"} if ([version]$LastVer -le [version]$CurVer) { Write-Host -ForeGroundColor Green "Актуальная версия 360EE уже имеется" exit } # Просматриваются все имеющиеся на форуме темы 360EE, находится актуальная и в версии для печати закачивается в переменную. # Определяются ссылки на инсталлятор с офсайта, русификатор и патч - с хостингов, затем все скачивается $tmp = (New-Item -Path $("$env:TEMP\"+"360EE"+(get-random).tostring()) -ItemType Directory).FullName if (($Rus) -or ($PatchWS)) { $alltop360 = Invoke-WebRequest -Uri $url_alltop360 $acttop360 = $alltop360.Links.outerHTML | ?{$_ -match 'topic=(\d+).+360 extreme explorer'} | %{$matches[1]} | Select -Last 1 $printver = Invoke-WebRequest -Uri "$url_printver$acttop360" } if ($Rus) { $url_sharhostrus = ($printver.links | ?{$_ -match "русификатор для 360 Extreme Explorer версии $LastVer"}).href | Select -Unique if ($url_sharhostrus) { $sharhostrus = Invoke-WebRequest -Uri "$url_sharhostrus" } else { Write-Host -ForeGroundColor Red "Для версии $LastVer не найден русификатор. Скоро будет..." Remove-Item -Path $tmp -Recurse -Force -ErrorAction SilentlyContinue exit } $RusLink=$sharhostrus.baseresponse.responseuri.host + ($sharhostrus.Links.href | ? {$_ -match "/.+/360chrome.*\.zip"}) $RusName = $RusLink.split('/')[-1] Invoke-WebRequest -Uri $RusLink -OutFile $tmp\$RusName -ErrorAction SilentlyContinue } if (($PatchWS) -and (!(Test-Path -Path $EEPath\*fix*webstore*search*.exe -PathType Leaf))) { $url_sharhostpatch = ($printver.links | ?{$_ -match "Универсальный патч.+$LastVerMajor[\d+\.]{3}"}).href | Select -Unique if ($url_sharhostpatch) { $sharhostpatch = Invoke-WebRequest -Uri $url_sharhostpatch } else { Write-Host -ForeGroundColor Red "Для версии $LastVer не найдено исправление магазина и поиска на Google" Remove-Item -Path $tmp -Recurse -Force -ErrorAction SilentlyContinue exit } $PatchLink=$sharhostpatch.baseresponse.responseuri.host + ($sharhostpatch.Links.href | ? {$_ -match "webstore.*search.*\.zip"}) Invoke-WebRequest -Uri $PatchLink -OutFile "$tmp\fix_webstore_search.zip" -ErrorAction SilentlyContinue } $DistrName = ($offsite.links.href | ?{$_ -match "$LastVer"} | Select -Unique | tee -var DistrLink).split('/')[-1] Invoke-WebRequest -Uri $DistrLink -OutFile $tmp\$DistrName -ErrorAction SilentlyContinue # Списки файлов и каталогов для вырезания из дистра $CutDistr = $CutDistr -as[int] switch ($CutDistr) { 0 { $DistrExclude = @() } 1 { $DistrExclude = @{ dirs = "360BdoctorExt", "installer", "swiftshader" files = "360base.dll", "360bdoctor.exe", "cloudurls.dat", "itrusenroll.dll", "mobileadapter.dll", "npaliedit.dll", "npalisecctrl.dll", "npalissologin.dll", "npcombrg.dll", "safe505.dll", "sesafe.dll", "setdefbrowser.dll", "smartpreheat.dat", "smart_preheat.dll", "smartpreheat64.dll", "updatecfg.ini", "urlproc.dll", "navhome.htm", "wow_helper.exe", "xlbughandler.dll", "xlbugreport.exe" } } 2 { $DistrExclude = @{ dirs = "360BdoctorExt", "download", "installer", "plugins", "swiftshader" files = "360base.dll", "360bdoctor.exe", "cloudurls.dat", "config", "eacl.dat", "gpubl.dat", "gpuwl.dat", "khtn.dat", "mobileadapter.dll", "navhome.htm", "presetui.dll", "safe505.dll", "sesafe.dll", "setdefbrowser.dll", "sibc.dat", "smartpreheat.dat", "smart_preheat.dll", "smartpreheat64.dll", "switcher", "updatecfg.ini", "urllibauth.dat", "urlproc.dll", "wdcnf.dat", "wow_helper.exe" } } } # Если при обновлении браузер запущен... while ((Get-Process "360chrome" -ea 0).Path | Split-Path -ea 0 | ?{$_ -eq $EEPath}) { Write-Host -ForeGroundColor Red "360EE работает, закройте программу и нажмите любую клавишу для продолжения" [void][System.Console]::ReadKey($true) } # Создается каталог установки, если он отсутствует. # Затем делается бэкап. При обновлении удаляется текущая версия. if (!(Test-Path -Path $EEPath -PathType Container)) { New-Item -Path $EEPath -ItemType Directory } if (Test-Path -Path $EEPath\$CurVer -PathType Container) { $delcurver = "$EEPath\$CurVer","$EEPath\360chrome.exe" if (Test-Path -Path "$EEPath\User Data" -PathType Container) {$backup = $delcurver + "$EEPath\User Data"} if ($CreateBackup) {Compress-Archive -Path $backup -DestinationPath $EEPath\$curver.zip -Force} Remove-Item -Path $delcurver -Recurse -Force -ErrorAction SilentlyContinue } # Если отсутствует в системе, то скачивается и устанавливается модуль 7zip для работы в PS if (!(Get-Module -Name 7zip4powershell -ListAvailable)) { Install-Module -Name 7zip4powershell -Force Import-Module -Name 7zip4powershell $Delete7zm = $true } # Распаковываются дистр и русификатор, копируются в каталог установки Expand-7Zip -ArchiveFileName $tmp\$DistrName -TargetPath $tmp Expand-7Zip -ArchiveFileName $tmp\chrome.7z -TargetPath $tmp robocopy "$tmp\Chrome-bin" "$EEPath" /E /XD $DistrExclude.dirs /XF $DistrExclude.files if ($Rus) { Expand-Archive -Path $tmp\$RusName -DestinationPath $EEPath\$LastVer -Force Move-Item -Path $EEPath\$LastVer\locales\ru-ru.pak -Destination $EEPath\$LastVer\locales\en-us.pak -Force } # Распаковка и применение патча. Он остается в папке установки, чтоб не качать каждый раз. if ($PatchWS) { if (!(Test-Path -Path $EEPath\*fix*webstore*search*.exe -PathType Leaf)) { Expand-Archive -Path $tmp\fix_webstore_search.zip -DestinationPath $EEPath Remove-Item -Path $EEPath\*.dup2 -ErrorAction SilentlyContinue -Force } $patch = (Get-Item -Path $EEPath\*fix*webstore*search*.exe).FullName &($patch) /silent /overwrite /startupworkdir "$EEPath\$LastVer" } # Создание лоадера в каталоге установки if ($CreateLoader) { if (!(Test-Path -Path $EEPath\360chrome.cmd -PathType Leaf)) { DATA LoaderContent { '@echo off' '360chrome.exe --disable-background-networking --disable-default-apps --disable-update --disable-component-update' 'pushd ".\User Data\Default"' 'rd /S /Q Cache,GPUCache,"Pepper Data","Media Cache"' 'del /F /Q History' 'rd /S /Q ..\temp,..\ShaderCache,..\..\components\swiftshader,%appdata%\Adobe,%localappdata%\Adobe' 'reg delete "HKCU\Software\360Chrome" /f' 'reg delete "HKCU\Software\Chromium" /f' } Set-Content -Path $EEPath\360chrome.cmd -Value $LoaderContent } } # Если каталог download указан в $DistrExclude, то он удаляется и вместо # него в components\ пишется файл-пустышка с таким же именем. # Если нет, то зачищаются файлы из архива download.7z, если они есть в $DistrExclude. if (Test-Path -Path $EEPath\components\download\download.7z -PathType Leaf) { Remove-Item -Path $EEPath\components\download\* -Recurse -Force -ErrorAction SilentlyContinue Expand-7Zip -ArchiveFileName $tmp\Chrome-bin\components\download\download.7z -TargetPath $tmp\download Get-ChildItem $tmp\download -Directory -Recurse | ?{ $DistrExclude.dirs -contains $_} | Remove-Item -ea 0 -Force Get-ChildItem $tmp\download -File -Recurse | ?{ $DistrExclude.files -contains $_} | Remove-Item -ea 0 -Force Compress-7zip -ArchiveFileName $EEPath\components\download\download.7z -Path $tmp\download } else { if (Test-Path -Path $EEPath\components\download -PathType Container) { Remove-Item -Path $EEPath\components\download -Recurse -Force -ErrorAction SilentlyContinue } Set-Content -Path $EEPath\components\download -Value "" } # Создание ярлыка для запуска лоадера с иконкой из 360chrome.exe. # Запуск через powershell.exe нужен для скрытия окна батника. # Ярлык создается, если его еще нет на рабочем столе. if (($CreateLoader) -and ($CreateShortcut)) { $Shell = New-Object -ComObject WScript.Shell $Shortcuts = Get-ChildItem -Recurse $env:USERPROFILE\Desktop -Include *.lnk if (!($shortcuts | %{$shell.CreateShortcut($_.FullName).Arguments} | ? {$_ -like "*$EEPath\360chrome.cmd*"})) { if (($shortcuts | %{$shell.CreateShortcut($_.FullName)}).FullName | ? {$_ -like "*\360 Extreme Explorer.lnk"}) { $shortcut = $Shell.CreateShortcut("$env:USERPROFILE\Desktop\360 EE $(Get-Date -Format ddMMyyyy_HHmmss).lnk") } else { $shortcut = $Shell.CreateShortcut("$env:USERPROFILE\Desktop\360 Extreme Explorer.lnk") } $shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" $shortcut.IconLocation = "$EEPath\360chrome.exe, 0" $shortcut.Arguments = "-NoProfile -WindowStyle Hidden -Command `"$EEPath\360chrome.cmd`"" $shortcut.WorkingDirectory = "$EEPath" $shortcut.WindowStyle = "7" $shortcut.Save() } } # Удаление временной папки и модуля 7zip4powershell if ($DelTemp) {Remove-Item -Path $tmp -Recurse -Force -ErrorAction SilentlyContinue} if ($Delete7zm) { Remove-Module -Name 7zip4powershell -Force exit 1 } | | Всего записей: 288 | Зарегистр. 19-05-2006 | Отправлено: 18:57 15-04-2019 | Исправлено: virjokk, 18:58 15-04-2019 |
|