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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Ungoogled Chromium (часть 1)

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

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

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

virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сохранять в кодировке UTF-8, имя любое, расширение - bat, cmd

Код:
<# :
@echo off
cd /d "%~dp0"
powershell.exe -nol -nop -ex bypass -c "&{[ScriptBlock]::Create((gc -lit '%~f0' -enc UTF8) -join [Char]10).Invoke(@(&{$args}%*))}"
exit /b
#>
# Запускатель с функцией обновления и очистки браузера Ungoogled Chromium (сборка от Macchrome).
# Без параметров: с заданным интервалом проверяет обновления, если есть - устанавливает/обновляет браузер,
# выдавая уведомление в трее, затем запускает Ungoogled. Создает ярлык на рабочем столе (если его еще нет) с запуском без параметров.
# После закрытия окна браузера удаляются временные папки и ключи реестра, указанные в соответствующих переменных.
# Параметры можно указывать при старте батника в командной строке консоли Windows (напр., chrome.bat -onlyrun),
# либо в ярлыке на рабочем столе. Чтобы в Windows 10 запустить консоль в папке батника нужно открыть эту папку в проводнике,
# установить курсор в адресную строку, вместо адреса ввести на клавиатуре команду «CMD» и нажать на клавишу «Enter».
# Для правильной работы достаточно поместить батник в любую пустую папку (кроме корневых, системных и с ограниченным доступом)
# и запустить.При первом старте в эту папку скачивается последняя версия Ungoogled, создается ярлык на рабстоле и запускается браузер
# с набором ключей, обеспечивающим в том числе портативную работу. В дальнейшем про батник можно не вспоминать и запускать браузер
# только с ярлыка. Обновления скачиваются во временную подпапку в той же папке, где расположен батник, и после их установки
# временная подпапка удаляется. Никуда больше батник в системе не лезет. Учитывается специфика сборки от Macchrome: иногда
# он выпускает несколько сборок одной и той же версии Ungoogled, соответственно, будет скачиваться каждая новая сборка.
# Сам батник - это гибрид Powershell/CMD, то есть его основная часть является сценарием на PowerShell, а несколько первых строк
# на CMD нужны только для старта этого сценария. В современных Windows скрипты PS можно запускать и напрямую, но для этого
# нужно предварительно дать разрешение на исполнение неподписанных сценариев, а также либо зарегистрировать файловую ассоциацию на
# скрипты PS, либо из командной строки запускать PS с аргументами, что хлопотно и вряд ли будет делаться пользователями.
# Идея этого батника и принцип работы позаимствованы у Insorg с его крутейшей "быстрой настройкой Chrome браузеров по методу трёх батников".
# Здесь то, что делает несколько батников от Insorg, объединено в один. Кроме того, у Insorg все сделано на "чистом" CMD.
# Содержимое батника может быть легко изменено обладателями минимальных познаний в PowerShell, который не является языком
# программирования и очень прост в освоении.
# Параметры:
# -onlyrun - не проверять обновления, сразу запуск браузера;
# -onlycheck - наоборот, не запускать браузер, только проверить обновления независимо от установленного интервала;
# -nolnk - не создавать ярлык на рабочем столе;
# -ask - перед обновлением - спрашивать.
# Интервал проверки обновлений (количество дней) задается в переменной $CheckInterval, по умолчанию - 3,
# если поставить 0, будет проверять при каждом запуске.
# Имя папки профиля - в переменной $userdatadir, по умолчанию - User Data.
# Список ключей запуска хрома - $argslist, файлы и папки, удаляемые после закрытия браузера - $udclean, $uddclean,
# ветки реестра - $regclean. Ключи, удаляемые папки и ветки реестра обязательно просмотрите и удалите лишнее или добавьте свое.
# Временно отключить ключ запуска или удаляемый файл/папку можно просто закомментировав соответствующиую строку символом #.
# Каждая запись добавляется отдельной строкой в двойных кавычках. В $udclean указывается содержимое (только имена, без путей)
# папки User Data, в $uddclean - User Data\Default, в $regclean - HKEY_CURRENT_USER\SOFTWARE.
# Сам дистр ставится как есть, "лишние" файлы не удаляются: chrome_pwa_launcher.exe,notification_helper.exe остаются на месте.
# В создаваемом ярлыке запуск батника происходит через PowerShell, чтобы скрыть окно консоли cmd.
# Добавить параметр в ярлык можно, отредактировав в свойствах ярлыка путь:  
# C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -Command cmd /c 'C:\progr\ungoogled\chrome.cmd' -onlyrun
# Путь к батнику обязательно в одинарных кавычках.
 
$CheckInterval = 0
 
$userdatadir = "User Data"
 
$argslist = @(
   "--user-data-dir=`"$userdatadir`""
   "--disable-machine-id"
   "--disable-encryption"
   "--no-default-browser-check"
   "--disable-gpu-shader-disk-cache"
   "--disk-cache-dir=nul"
   "--disk-cache-size=1"
   "--disable-search-engine-collection"
   "--disable-sharing-hub"
   "--hide-sidepanel-button"
   "--remove-tabsearch-button"
   "--remove-grab-handle"
   "--scroll-tabs=always"
   "--popups-to-tabs"
   "--close-window-with-last-tab=never"
   "--show-avatar-button=never"
   "--tab-hover-cards=tooltip"
   "--extension-mime-request-handling=always-prompt-for-install"
   "--enable-features=#enable-parallel-downloading"
   "--force-punycode-hostnames"
)
 
$udclean = @(
   "BrowserMetrics"
   "Crowd Deny"
   "GrShaderCache"
   "MEIPreload"
   "ShaderCache"
   "SSLErrorAssistant"
   "ZxcvbnData"
   "BrowserMetrics-spare.pma"
   "chrome_shutdown_ms.txt"
   "Module Info Cache"
)
 
$uddclean = @(
   "BudgetDatabase"
   "Cache"
   "Code Cache"
   "commerce_subscription_db"
   "coupon_db"
   "DawnCache"
   "GPUCache"
   "optimization_guide_hint_cache_store"
   "optimization_guide_model_metadata_store"
   "shared_proto_db"
   "Service Worker"
)
 
$regclean = @(
   "Chromium"
)
 
 
$lastcheck = "14012024"
$macbuild = "1"
 
$batfilename = $MyInvocation.Line -match "\'(\w:\\.+)\'" | %{$matches[1]}
$batfilepath = Split-path "$batfilename"
if ($batfilepath -match "\w:\\$") {write-host "$batfilepath is root" -foregroundcolor red; return}
 
$onlyrun = $args -match "^([/-]|--)?onlyrun$"
$onlycheck = $args -match "^([/-]|--)?onlycheck$"
$nolnk = $args -match "^([/-]|--)?lnk$"
$ask = $args -match "^([/-]|--)?ask$"
 
[Net.ServicePointManager]::SecurityProtocol = 'ssl3,tls,tls11,tls12'
Add-Type -AssemblyName System.Web
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
 
Function IconHandle {
   $iconBase64=@('iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAADlUlEQVR4nO2U+'
   '0tTYRzG979EEf1UBBbFtF21C0TShXJagVFkkd0oKCFkU1mmaYhlRqUeN2dNu7iZba3UMt0vao0uK7rQ1Wp2YddzeeI9skp33u247Lc'
   'eeOBwfnk+3+f9vq9C8V9pSF97L0NlHC1ZZnzQWlTvHdlV18scutC5RvEvpTLfL1h2+O1rZWFEUG4SIOXlOzkUlL+LHDjfXTZjweraf'
   'mXmvrFxZZ50qJQzDQI2HvvCHTpnN/xduNF3QrmFkx081bptPIobBu6kFa4qfeRQGtIL/tNZ+QJ21Y8+n164cfTkdCpPCWEQUNx41yM'
   'vvM69RLk1/dpp1hTyOGK7uiElgLbl7sOle9kZByDeWBpgk4dbLBo18x3KmjAWb5duQb1ZQM1FAT4/EI4CMQ54EwCco4DpGlB6ZbJNX'
   'QIqbvI4fodF1UAM5T0X9lABdNZbvWomCOKM3TEs3jEZIrdIgP8VEIkB14cBs2PCXSMT/z58A2o9AipcHCp7WVQPRnFyaLJNLu84FUD'
   'T6g/HAVSNISxYy/+CIJOT8BefgLzTgNY82YYzwMvPwFhQwClvYnDcZX1fIRm+3G6ZEw+Pe0lJDPNXC1i0nRNrJ1NKhf8JEWEBz0uOC'
   'lBNWug+o0qc3mbbMBVA3RzEwnxOhPC9EMTaaeFxO0aA9z8EKoDYwo2mygSA7LaOkgQAJojM6ogIEAwDx52pASqdQIxHCoBOl8QCdh6'
   'VAhAXsoidFkCUSwVg75EAaF9HA8g6G8IDP2buCLqbzAkAKxlmNg2AuMrJiUtIFo0Wnt8wsYTXH6exhETa1qchGkC2JQh/gBevmhQEC'
   'X/1GXg2BlTdTzJ9/7j0NSTSWd23k7WwviMkQpApSdVkJ4jJN/n37CNwsItNWr/JNRRQ0KS/ZFWpmW9UAGK9JYhabxS+TzxCLET7Pgg'
   '45QJW1fFixdT6B6MwO87vpgIQ6ax9I8kApKyt5sVjKO6KJZ/e4wsqUinH1jxPzbzjZQM0h8TwVfX0xSM23wujoqchWyFH+jb7NjXzV'
   'RaApjEiAhxx0ac/MRhBmbPtoqzwuPTWa1VyIDR1LHLPscnDbzq8inSktV4uTHUcuhoexl567dOefKr0l5i5Okv/sNTt0DSHkNfCSm6'
   '76ZYvJPvM5SjHZs/SWd0eDfPk12O1oimMyoHfweV94zC5vYGUV+1vlWOxzMpub8/df9XeUtbT4SZvO/V5/S9Fcv0EOC7m4RioxTcAA'
   'AAASUVORK5CYII=') -join ''
   $iconBytes = [Convert]::FromBase64String($iconBase64)
   [System.Drawing.Icon]::FromHandle(
      ([System.Drawing.Bitmap]::new(
         [System.IO.MemoryStream]::new($iconBytes, 0, $iconBytes.Length)
      ).GetHIcon())
   )
}
 
Function ShowBaloon ($message,$title="Ungoogled Chromium",$messagetype="Info") {
   $balloon = New-Object System.Windows.Forms.NotifyIcon
   $balloon.Icon = IconHandle
   $balloon.BalloonTipIcon  = [System.Windows.Forms.ToolTipIcon]$messagetype
   $balloon.BalloonTipText  = $message
   $balloon.BalloonTipTitle = $title
   $balloon.Visible = $true
   $balloon.ShowBalloonTip(10000)
}
 
Function SetVar ($name,$value) {
   Get-Content -Path "$batfilename" | %{
     $_ -replace "(?<=^\s*\x24$name\s*=\s*\x22)[^\x22]*","$value"
   } | Set-Content -Path "$($batfilename).tmp"
   Move-Item -Path "$($batfilename).tmp" -Destination "$batfilename" -Force
}
 
Function Check {
   try {$offsite = Invoke-RestMethod -Uri "https://api.github.com/repos/macchrome/winchrome/releases/latest"}
   catch {ShowBaloon -Message "Page is unavailable" -MessageType "Error"; return}
   $Script:latest = $offsite.assets.browser_download_url | ?{
      $_ -match ".+ungoogled-chromium-([\d\.]+-\d+)_Win64\.7z"
   } | Select -Last 1 | %{$Script:distrlink = $matches[0]; $matches[1]}
   if (-not $latest) {ShowBaloon -Message "Error parsing version" -MessageType "Error"; return}
   SetVar -name "lastcheck" -value "$(Get-Date -Format 'ddMMyyyy')"
   $current = (Get-Item -Path "$batfilepath\chrome.exe" -ea 0).VersionInfo.ProductVersion
   if ([version]$latest.split('-')[0] -le [version]$current) {
      if ([int]$latest.split('-')[1] -le [int]$macbuild) {return}
   }
   if ($ask) {
      if (
           [System.Windows.Forms.MessageBox]::Show("Ungoogled $latest is new version! Update?","Shooze action","YesNo","Question") -like 'Yes'
         )  
      {
         return $true
      }
   } else {
      ShowBaloon -Message "Ungoogled $latest is new version, start update..."
      return $true
   }
}
 
Function GetFile ($link,$name,$title) {
   $progressForm = New-Object System.Windows.Forms.Form
   $progressForm.Size = New-Object System.Drawing.Size(317,150)
   $progressForm.StartPosition = 'CenterScreen'
   $progressForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
   $progressForm.BackColor = '#0B5162'
   $progressForm.TopMost = $True
   $progressForm.Text = "New: $Latest"
   $progressForm.Icon = IconHandle
   
   $progressBar = New-Object System.Windows.Forms.ProgressBar
   $progressBar.Location = New-Object System.Drawing.Point(10, 50)
   $progressBar.Size = New-Object System.Drawing.Size(280, 20)
   $progressForm.Controls.Add($progressBar)
   
   $progressLabel = New-Object System.Windows.Forms.Label
   $progressLabel.Location = New-Object System.Drawing.Point(10, 20)
   $progressLabel.Size = New-Object System.Drawing.Size(280, 20)
   $progressLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
   $progressLabel.Font = new-object System.Drawing.Font('Ariel',9,[System.Drawing.FontStyle]::Bold)
   $progressLabel.ForeColor = '#D7E7F7'
   $progressForm.Controls.Add($progressLabel)
   
   $uri = New-Object "System.Uri" $link
   $request = [System.Net.HttpWebRequest]::Create($uri)
   $request.set_Timeout(15000)
   $response = $request.GetResponse()
   $responseContentLength = $response.get_ContentLength()
   $totalLength = $response.get_ContentLength() / 1MB
   $responseStream = $response.GetResponseStream()
   $targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList "$name", Create
   $buffer = new-object byte[] 10KB
   $count = $responseStream.Read($buffer,0,$buffer.length)
   $downloadedBytes = $count
 
   $progressForm.Show()
   while ($count -gt 0)
   {
       $targetStream.Write($buffer, 0, $count)
       $count = $responseStream.Read($buffer,0,$buffer.length)
       $downloadedBytes = $downloadedBytes + $count
       $progressBar.Value = (($downloadedBytes / 1MB) / $totalLength) * 100
       $progressLabel.Text = "$($title):   $('{0:N2} MB' -f ($downloadedBytes / 1MB))   of   $('{0:N2} MB' -f ($totalLength))"
       $progressForm.Refresh()
   }
   $targetStream.Flush()
   $targetStream.Close()
   $targetStream.Dispose()
   $responseStream.Dispose()
   $progressForm.Close()
}
 
Function Update {
   if ((ps chrome -ea 0).Path -eq "$batfilepath\chrome.exe") {
      ShowBaloon -Message "Ungoogled is running" -MessageType "Error"; return
   }
   $Script:tmp = (New-Item -Path $("$batfilepath\"+"temp"+(get-random).tostring()) -ItemType Directory).FullName
   $distrname = $distrlink.split('/')[-1]
   try {GetFile -link "$distrlink" -name "$tmp\$distrname" -title "Chromium"}
   catch {ShowBaloon -Message "Error download file $distrname" -MessageType "Error"; return}
   try {GetFile -link "https://www.7-zip.org/a/7zr.exe" -name "$tmp\7zr.exe" -title "7-zip"}
   catch {ShowBaloon -Message "Error download 7zip" -MessageType "Error"; return}
   &$tmp\7zr.exe x "$tmp\$distrname" -xr!"*er.exe" -o"$tmp" -y
   if ($LASTEXITCODE -ne 0) {ShowBaloon -Message "Error unpack file $distrname" -MessageType "Error"; return}
   ShowBaloon -Message "Unpack and copy files, and start Ungoogled..."
   $nodel = "$userdatadir","$($tmp.split('\')[-1])","$($batfilename.split('\')[-1])"
   Get-Item -Path "$batfilepath\*" -Exclude $nodel -ea 0 | Remove-Item -Recurse -Force -ea 0
   Copy-Item -Path "$tmp\ungoogl*\*" -Destination "$batfilepath" -Recurse -Force
   SetVar -name "macbuild" -value $latest.split('-')[1]
   if (-not [IO.Directory]::Exists("$batfilepath\$userdatadir")) {
      New-Item -Path "$batfilepath\$userdatadir" -ItemType Directory -Force | Out-Null
      @(
        '{"distribution":{"alternate_shortcut_text":false,"chrome_shortcut_icon_index":0,"create_all_shortcuts":true,'
        '"do_not_create_desktop_shortcut":true,"do_not_create_quick_launch_shortcut":true,"do_not_create_taskbar_shortcut":true,'
        '"do_not_launch_chrome":true,"do_not_register_for_update_launch":true,"import_bookmarks":false,"import_history":false,'
        '"import_home_page":false,"import_search_engine":false,"make_chrome_default":false,"make_chrome_default_for_user":false,'
        '"show_welcome_page":false,"skip_first_run_ui":true,"system_level":false,"verbose_logging":false},'
        '"first_run_tabs":[],"homepage":"chrome://chrome-urls","homepage_is_newtabpage":false,"safebrowsing":{"enabled":false},'
        '"session":{"restore_on_startup":1},"alternate_error_pages":{"enabled":false},"NewTabPage":{"DisabledModules":["dummy","dummy2"],'
        '"ModulesVisible":false},"account_id_migration_state":2,"autofill":{"credit_card_enabled":false,"enabled":false,'
        '"orphan_rows_removed":true,"profile_enabled":false},"bookmark_bar":{"show_apps_shortcut":false,"show_on_all_tabs":false,'
        '"show_only_on_ntp":true,"show_reading_list":false},"browser":{"show_home_button":true,"check_default_browser":false,'
        '"clear_data":{"browsing_history_basic":true,"cache_basic":true,"cookies_basic":true,"form_data":true,"hosted_apps_data":true,'
        '"media_licenses":true,"passwords":true,"preferences_migrated_to_basic":true,"site_settings":true,"time_period":4,'
        '"time_period_basic":4},"clear_lso_data_enabled":true,"has_seen_welcome_page":true,"last_clear_browsing_data_tab":1,'
        '"window_placement":{"bottom":720,"left":64,"maximized":true,"right":1200,"top":32}},"credentials_enable_autosignin":false,'
        '"credentials_enable_service":false,"default_apps_install_state":2,"download":{"directory_upgrade":true,"prompt_for_download":true},'
        '"enable_do_not_track":true,"extensions":{"alerts":{"initialized":true},"ui":{"developer_mode":true}},'
        '"media":{"engagement":{"schema_version":4}},"net":{"network_prediction_options":2},"omnibox":{"prevent_url_elisions":true},'
        '"payments":{"can_make_payment_enabled":false},"profile":{"avatar_index":24,"block_third_party_cookies":true,'
        '"content_settings":{"clear_on_exit_migrated":true,"pref_version":1},'
        '"default_content_setting_values":{"background_sync":2,"cookies":1},'
        '"exit_type":"Normal","exited_cleanly":true,"local_avatar_index":24,'
        '"managed_user_id":"","name":"","password_manager_enabled":false},"search":{"suggest_enabled":false}}'
      ) -join '' | Set-Content -Path "$batfilepath\master_preferences"
      @(
        '{"background_mode":{"enabled":false},"browser":{"enabled_labs_experiments":["ignore-gpu-blocklist","smooth-scrolling@2"]},'
        '"hardware_acceleration_mode_previous":true,"profile":{"last_used":"Default"}}'
      ) -join '' | Set-Content -Path "$batfilepath\$userdatadir\Local State"
   }
}
 
if (-not $onlyrun) {
   if ((ping -n 1 ya.ru) -match 'TTL=') {
      if ($onlycheck -or (New-TimeSpan -Start $([datetime]::parseexact($lastcheck, 'ddMMyyyy', $null))).Days -ge [int]$CheckInterval) {
         if (Check) {Update; Remove-Item -Path "$tmp" -Recurse -Force -ErrorAction SilentlyContinue}
      }
   } else {
      ShowBaloon -Message "No internet connection" -MessageType "Error"
   }
}
 
if (-not $nolnk) {
   if (-not [IO.File]::Exists("$env:USERPROFILE\Desktop\Ungoogled Chromium.lnk")) {
      $lnkpath = Get-Item -Path "$env:USERPROFILE\Desktop\*.lnk" | %{
         (New-Object -COM WScript.Shell).CreateShortcut($_)
      } | ?{$_.TargetPath -like "*powershell.exe*" -and $_.Arguments -like "*$batfilename*"}
      if ([IO.File]::Exists("$batfilepath\chrome.exe") -and -not $lnkpath) {
         $shortcut = (New-Object -ComObject WScript.Shell).CreateShortcut("$env:USERPROFILE\Desktop\Ungoogled Chromium.lnk")
         $shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
         $shortcut.IconLocation = "$batfilepath\chrome.exe, 0"
         $shortcut.WindowStyle = 7
         $shortcut.Arguments = "-NoProfile -WindowStyle Hidden -Command cmd /c `'$batfilename`'"
         $shortcut.WorkingDirectory = "$batfilepath"
         $shortcut.Save()
      }
   }
}
 
if (-not $onlycheck) {
   if ([IO.File]::Exists("$batfilepath\chrome.exe")) {
      Start-Process -FilePath "$batfilepath\chrome.exe" -ArgumentList $argslist -WorkingDirectory "$batfilepath" -Wait
      Get-Item -Path "$batfilepath\$userdatadir\*","$batfilepath\$userdatadir\Default\*","HKCU:Software\*" -Include $($udclean+$uddclean+$regclean) | Remove-Item -Recurse -Force -ea 0
   } else {
      ShowBaloon -Message "Missed chrome.exe, run this again for download" -MessageType "Error"
      SetVar -name "lastcheck" -value "01011970"
   }
}
 

Всего записей: 289 | Зарегистр. 19-05-2006 | Отправлено: 15:56 13-09-2023 | Исправлено: virjokk, 19:45 14-01-2024
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Компьютеры » Программы » Ungoogled Chromium (часть 1)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru