|
| 1 | +#region Prepare |
| 2 | +$acp = $env:gcupdateACP -as [int] |
| 3 | +if ($acp -eq 936) { |
| 4 | + $bundle = Data { |
| 5 | + #culture="zh-CN" |
| 6 | + ConvertFrom-StringData @' |
| 7 | + MSG_WAIT_PROGRESS_TITLE = 正在准备更新,坐和放宽 |
| 8 | + NEED_WINDOWS = 请使用Windows系统运行! |
| 9 | + NEED_PSVERSION = 需要 PowerShell 的主要版本 >= 3, 目前版本为 {0} |
| 10 | + MSG_PRESS_ANYKEY_EXIT = 按任意键退出 ... |
| 11 | + MSG_PRESS_ANYKEY_START = 更新完成,按任意键启动Chrome ... |
| 12 | + NOT_FOUND = 找不到路径:{0} |
| 13 | + MSG_G2G = 您的浏览器将会在更新后重新启动,坐和放宽 |
| 14 | + MSG_KILL_FAIL = 无法结束Chrome.exe,可能是权限问题 |
| 15 | + MSG_RDY_KILL = 即将开始进行更新,更新过程中会自动结束Chrome并在更新完成后重新启动\n重启后可以根据浏览器右上方的提示恢复关闭前的会话(也可以直接按下Ctrl+Shift+T)\n按下任意键以启动更新,或者直接点击关闭按钮退出 |
| 16 | +'@ |
| 17 | + } |
| 18 | +} |
| 19 | +elseif ($acp -eq 950) { |
| 20 | + $bundle = Data { |
| 21 | + #culture="zh-TW" |
| 22 | + ConvertFrom-StringData @' |
| 23 | + MSG_WAIT_PROGRESS_TITLE = 正在準備更新,坐和放寬 |
| 24 | + NEED_WINDOWS = 請使用Windows系統運行! |
| 25 | + NEED_PSVERSION = 需要 PowerShell 的主要版本 >= 3, 目前版本為 {0} |
| 26 | + MSG_PRESS_ANYKEY_EXIT = 按任意鍵退出 ... |
| 27 | + MSG_PRESS_ANYKEY_START = 更新完成,按任意鍵啟動Chrome ... |
| 28 | + NOT_FOUND = 找不到路徑:{0} |
| 29 | + MSG_G2G = 您的瀏覽器將會在更新後重新啟動,坐和放寬 |
| 30 | + MSG_KILL_FAIL = 無法結束Chrome.exe,可能是權限問題 |
| 31 | + MSG_RDY_KILL = 即將開始進行更新,更新過程中會自動結束Chrome並在更新完成後重新啟動\n重啟後可以根據瀏覽器右上方的提示恢復關閉前的會話(也可以直接按下Ctrl+Shift+T) \n按下任意鍵以啟動更新,或者直接點擊關閉按鈕退出 |
| 32 | +'@ |
| 33 | + } |
| 34 | +} |
| 35 | +else { |
| 36 | + $bundle = Data { |
| 37 | + #culture="en-US" |
| 38 | + ConvertFrom-StringData @' |
| 39 | + MSG_WAIT_PROGRESS_TITLE = Sit back and relax |
| 40 | + NEED_WINDOWS = Windows Plz! |
| 41 | + NEED_PSVERSION = I need PowerShell major version >= 3, Current is {0} |
| 42 | + MSG_PRESS_ANYKEY_EXIT = Press any key to exit . . . |
| 43 | + MSG_PRESS_ANYKEY_START = Done! Press any key to start chrome . . . |
| 44 | + MSG_G2G = Your browser will restart after update, sit back and relax |
| 45 | + MSG_KILL_FAIL = Cant murder chrome.exe |
| 46 | + MSG_RDY_KILL = Chrome will be killed during the update process and restart after the update is complete.\nAfter restarting you can restore the session. (Ctrl+Shift+T)\nPress any key to start update, or close this window to exit |
| 47 | + NOT_FOUND = {0} 404 Not Found! |
| 48 | +'@ |
| 49 | + } |
| 50 | +} |
| 51 | +if ([string]::IsNullOrEmpty($env:gcupdatePATH)) { |
| 52 | + return |
| 53 | +} |
| 54 | +$installLocation = $env:gcupdatePATH.Trim() |
| 55 | +$archInt = $env:gcupdateARCH -as [int] |
| 56 | +$setDllExe = Join-Path $env:TEMP 'shuaxCAOdll32.exe' |
| 57 | +if ($archInt -eq 1) { |
| 58 | + $setDllExe = Join-Path $env:TEMP 'shuaxCAOdll64.exe' |
| 59 | +} |
| 60 | +$chromeDownloadFile = Join-Path $installLocation 'update.exe' |
| 61 | +$cbFolder = Join-Path $installLocation 'Chrome-bin' |
| 62 | +$chromeExe = Join-Path $installLocation 'chrome.exe' |
| 63 | +$chromeproxyExe = Join-Path $installLocation 'chrome_proxy.exe' |
| 64 | + |
| 65 | +#endregion Prepare |
| 66 | + |
| 67 | + |
| 68 | +#region Function |
| 69 | +function Exit-Script { |
| 70 | + param ( |
| 71 | + [string]$warning |
| 72 | + ) |
| 73 | + Write-Host $warning -ForegroundColor Red |
| 74 | + Write-Host $bundle['MSG_PRESS_ANYKEY_EXIT'] |
| 75 | + $_ = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") |
| 76 | + Break Script |
| 77 | +} |
| 78 | +function Remove-IfExists { |
| 79 | + param ( |
| 80 | + [string]$file |
| 81 | + ) |
| 82 | + if (Test-Path $file) { |
| 83 | + Remove-Item $file |
| 84 | + } |
| 85 | +} |
| 86 | + |
| 87 | +function Search-GCDll { |
| 88 | + foreach ($file in Get-ChildItem -Path $installLocation -Filter *.dll) { |
| 89 | + if ($file.VersionInfo.ProductName -eq 'GreenChrome') { |
| 90 | + return $file.Name |
| 91 | + } |
| 92 | + } |
| 93 | + return $null |
| 94 | +} |
| 95 | +function Search-GCUpdate { |
| 96 | + foreach ($file in Get-ChildItem -Path $installLocation -Filter *.gcupdate) { |
| 97 | + if ($file.VersionInfo.ProductName -eq 'GreenChrome') { |
| 98 | + return $file.Name |
| 99 | + } |
| 100 | + } |
| 101 | + return $null |
| 102 | +} |
| 103 | +function Set-Dll { |
| 104 | + param ( |
| 105 | + [string]$fileName |
| 106 | + ) |
| 107 | + $bakfile = Join-Path $installLocation 'chrome.exe~' |
| 108 | + Remove-IfExists $bakfile |
| 109 | + $params = "/d:$fileName chrome.exe" |
| 110 | + $process = New-Object System.Diagnostics.Process |
| 111 | + $process.StartInfo = New-Object System.Diagnostics.ProcessStartInfo($setDllExe, $params) |
| 112 | + $process.StartInfo.WorkingDirectory = $installLocation |
| 113 | + $process.StartInfo.RedirectStandardOutput = $true |
| 114 | + $process.StartInfo.UseShellExecute = $false |
| 115 | + $process.StartInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden |
| 116 | + $process.Start() | Out-Null |
| 117 | + $process.BeginOutputReadLine() |
| 118 | + $process.WaitForExit() |
| 119 | + $exitCode = $process.ExitCode |
| 120 | + $process.Dispose() |
| 121 | + if ($exitCode -eq 0) { |
| 122 | + Remove-IfExists $bakfile |
| 123 | + } |
| 124 | +} |
| 125 | + |
| 126 | +function Search-InstallPack { |
| 127 | + $gcUpdate = Search-GCUpdate |
| 128 | + if ($null -ne $gcUpdate) { |
| 129 | + return $true |
| 130 | + } |
| 131 | + if (!(Test-Path $cbFolder)) { |
| 132 | + return $false |
| 133 | + } |
| 134 | + $cbChromeExe = Join-Path $cbFolder 'chrome.exe' |
| 135 | + $updateFileVersion = Join-Path $cbFolder (Get-Item $cbChromeExe).VersionInfo.FileVersion.ToString() |
| 136 | + if ((Test-Path $cbFolder) -And (Test-Path $cbChromeExe) -And (Test-Path $updateFileVersion)) { |
| 137 | + return $true |
| 138 | + } |
| 139 | + return $false |
| 140 | +} |
| 141 | +function Start-UpdateGC { |
| 142 | + $gcUpdate = Search-GCUpdate |
| 143 | + $gcDll = Search-GCDll |
| 144 | + if ($null -eq $gcUpdate) { |
| 145 | + return |
| 146 | + } |
| 147 | + $gcUpdatePath = Join-Path $installLocation $gcUpdate |
| 148 | + $gcNewDllPath = Join-Path $installLocation ($gcUpdate -Replace ".gcupdate", "") |
| 149 | + $gcoldDllPath = Join-Path $installLocation $gcDll |
| 150 | + $gcBakPath = Join-Path $installLocation "$gcDll.bak" |
| 151 | + Remove-IfExists $gcBakPath |
| 152 | + Move-Item $gcoldDllPath $gcBakPath |
| 153 | + Move-Item $gcUpdatePath $gcNewDllPath |
| 154 | +} |
| 155 | +function Start-UpdateChrome { |
| 156 | + if (!(Test-Path $cbFolder)) { |
| 157 | + return |
| 158 | + } |
| 159 | + $chromeOld = Join-Path $installLocation 'chrome_old.exe' |
| 160 | + if ((Test-Path $chromeOld)) { |
| 161 | + $oldVersionDir = Join-Path $installLocation (Get-Item $chromeOld).VersionInfo.FileVersion |
| 162 | + if ((Test-Path $oldVersionDir)) { |
| 163 | + Remove-Item $oldVersionDir -Force -Recurse |
| 164 | + } |
| 165 | + Remove-Item $chromeOld -Force |
| 166 | + } |
| 167 | + $chromeproxyOld = Join-Path $installLocation 'chrome_proxy_old.exe' |
| 168 | + if ((Test-Path $chromeproxyOld)) { |
| 169 | + Remove-Item $chromeproxyOld -Force |
| 170 | + } |
| 171 | + Move-Item $chromeExe $chromeOld |
| 172 | + if ((Test-Path $chromeproxyExe)) { |
| 173 | + Move-Item $chromeproxyExe $chromeproxyOld |
| 174 | + } |
| 175 | + Move-Item "$cbFolder\*" -Destination $installLocation |
| 176 | + Remove-IfExists $cbFolder |
| 177 | + Remove-IfExists $chromeDownloadFile |
| 178 | + $gcDll = Search-GCDll |
| 179 | + if ($null -ne $gcDll) { |
| 180 | + Set-Dll $gcDll |
| 181 | + } |
| 182 | +} |
| 183 | +#endregion Function |
| 184 | + |
| 185 | +$host.ui.RawUI.WindowTitle = $bundle['MSG_WAIT_PROGRESS_TITLE'] |
| 186 | + |
| 187 | +#check env |
| 188 | +if ($ENV:OS -ne 'Windows_NT') { |
| 189 | + Exit-Script $bundle['NEED_WINDOWS'] |
| 190 | + return |
| 191 | +} |
| 192 | + |
| 193 | +if ($PSVersionTable.PSVersion.Major -lt 3) { |
| 194 | + Exit-Script ($bundle['NEED_PSVERSION'] -f $($PSVersionTable.PSVersion.Major)) |
| 195 | + return |
| 196 | +} |
| 197 | + |
| 198 | +if (!(Test-Path $installLocation)) { |
| 199 | + Exit-Script ($bundle['NOT_FOUND'] -f $installLocation) |
| 200 | + return; |
| 201 | +} |
| 202 | + |
| 203 | +if (!(Search-InstallPack)) { |
| 204 | + Exit-Script ($bundle['NOT_FOUND'] -f 'Installer') |
| 205 | +} |
| 206 | + |
| 207 | +if (!(Test-Path $setDllExe)) { |
| 208 | + Exit-Script ($bundle['NOT_FOUND'] -f 'SetDll') |
| 209 | +} |
| 210 | + |
| 211 | +#good to go |
| 212 | + |
| 213 | +#kill chrome.exe |
| 214 | +$chromeProcess = Get-Process -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $chromeExe } |
| 215 | +if ($chromeProcess) { |
| 216 | + Write-Host $bundle['MSG_RDY_KILL'] -ForegroundColor Yellow |
| 217 | + $_ = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown"); |
| 218 | + $chromeProcess | Stop-Process |
| 219 | + Start-Sleep 1 |
| 220 | +} |
| 221 | +else { |
| 222 | + Write-Host $bundle['MSG_G2G'] -ForegroundColor Yellow |
| 223 | +} |
| 224 | +$chromeProcess = Get-Process -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $chromeExe } |
| 225 | +if ($chromeProcess) { |
| 226 | + Exit-Script $bundle['MSG_KILL_FAIL'] |
| 227 | + return |
| 228 | +} |
| 229 | +#do update |
| 230 | +Start-UpdateGC |
| 231 | +Start-UpdateChrome |
| 232 | +#restart |
| 233 | +Write-Host $bundle['MSG_PRESS_ANYKEY_START'] -ForegroundColor Green |
| 234 | +$_ = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") |
| 235 | +if ((Test-Path $chromeExe)) { |
| 236 | + Start-Process -FilePath $chromeExe |
| 237 | +} |
| 238 | +# SIG # Begin signature block |
| 239 | +# MIIFlwYJKoZIhvcNAQcCoIIFiDCCBYQCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB |
| 240 | +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR |
| 241 | +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUy1GDuzp3wq+AM6AFU8t61k2c |
| 242 | +# 35GgggMtMIIDKTCCAhWgAwIBAgIQE3U7au1O4rZEMExUKPt7LTAJBgUrDgMCHQUA |
| 243 | +# MB8xHTAbBgNVBAMTFFRLUG93ZXJTaGVsbFRlc3RDZXJ0MB4XDTE3MTEwOTA3MTg0 |
| 244 | +# MVoXDTM5MTIzMTIzNTk1OVowHzEdMBsGA1UEAxMUVEtQb3dlclNoZWxsVGVzdENl |
| 245 | +# cnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZwoClq3b+amIlFj53 |
| 246 | +# bpY/0DybAvJHI/mN9EJKGmxeW5DLo7AFon4bimtcC9uRFXzLgKADozHTQt2/2UJj |
| 247 | +# kga7Hbdx5cSZZvXD3rRNhYs2gpUh6YEiuPzJVo1Da9HYFPHdBhX/doT3L4VKGiJd |
| 248 | +# MUBqBzcfEOTCochd74dFbzwdQj+9132XlhSOpT6iEgAz7MoKXxcaYWDdChq4wGwb |
| 249 | +# BGAA/cAdimH2jFIXx5qSs0/SNmkPzkS0rfkwA4c53paVuwjq3Mwj1emifMw1hV5x |
| 250 | +# 0R50uyBDZwF6vWxnMYX9hdG8dNgQptecCP2EhfP9VUrwRM4tN0jH+FoWXYh+q68S |
| 251 | +# PY4RAgMBAAGjaTBnMBMGA1UdJQQMMAoGCCsGAQUFBwMDMFAGA1UdAQRJMEeAEG9T |
| 252 | +# Gh8zK8+owaVTRGAMetOhITAfMR0wGwYDVQQDExRUS1Bvd2VyU2hlbGxUZXN0Q2Vy |
| 253 | +# dIIQE3U7au1O4rZEMExUKPt7LTAJBgUrDgMCHQUAA4IBAQAo0tjSpnncS34kqTut |
| 254 | +# NdZxkyerzpwzbRJsrYYAI0WGErcPUIvKG8un4n50Dtm8b8KwWQUK9FQkNhSv0ULR |
| 255 | +# QCT+Qrxm05IVNBhlbQfbjoYe9wGlXZdlxuUX++a/UemVG0WVOPpDc1PeI++8OnnY |
| 256 | +# hNx1O5hRb7D+zT2eTAXtKYf6FKbj1BLaz9v6hVGpjOX3Ypi79Kx/zXCJC6B5laOK |
| 257 | +# k4msoa2FHibX0L/UUKvHSMcbzTx1XfEbr2RXS+UE2b8nBzx4hE0OkU6wAQp/C/Kq |
| 258 | +# L8P70+b3HpXznOhtCS1lGOJ9H+22TiIVIiGag6Nq61wHpcFaYhw6yyE/En9nB7Ur |
| 259 | +# GhVCMYIB1DCCAdACAQEwMzAfMR0wGwYDVQQDExRUS1Bvd2VyU2hlbGxUZXN0Q2Vy |
| 260 | +# dAIQE3U7au1O4rZEMExUKPt7LTAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEK |
| 261 | +# MAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3 |
| 262 | +# AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUCLF+nhDG9ERWuMyg |
| 263 | +# vQrPXu/8bYAwDQYJKoZIhvcNAQEBBQAEggEAXbyk2yHhFrQgmNReXn9Bja9unARQ |
| 264 | +# RChya2aUrZRS5pBWxxQYdLM2+528T7f3tSB6SWB53C6xrhTiKq4pTJ6H9KSMa+9Z |
| 265 | +# tOK0+zE/7vbAYdGtLOOgwFommhiG6L4JDM9pgfC4LRG0YT7d9wUhZRxSKnW68uL8 |
| 266 | +# exo3LBuU/GDuKwDmdbkLpOFHefo7kl1U8gSMs4D6Q7hWEoVSRtxB6jLJp0DgIrYC |
| 267 | +# 2Ji+fZL4yYuQC7ssRNboSRnJWEIXeceg6JNVBc96dI1wkK9wgGdqM9rYn9WLgiR4 |
| 268 | +# Ejn1+Il5LzJJo4SQ1zu9Z7yKezLTgxOr98yPIvxcU32T6o+Iphy08BN49A== |
| 269 | +# SIG # End signature block |
0 commit comments