Skip to content

Commit 97f3ef1

Browse files
committed
add gcupdate script
1 parent 4ac7916 commit 97f3ef1

File tree

1 file changed

+269
-0
lines changed

1 file changed

+269
-0
lines changed

ChromeDownload/GCupdate.ps1

Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
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

Comments
 (0)