编辑:下面的修复版本。
我有一个脚本,可以让我更新以可移植格式分发的任何应用程序,而且它可以正常工作。VSCode 除外。使用 VSCode,运行脚本后,我总是使用与以前相同的版本。这是 XnViewMP 的特定脚本,它 100% 有效:
$project = "XnViewMP"
$url = "https://download.xnview.com/XnViewMP-win-x64.zip"
Set-Location \PortableApps\$project
Write-Output `n`n"Trying to get file from:" $url
try {mkdir .staging -erroraction 'silentlycontinue'} catch{}
Set-Location .staging
curl.exe $url -L -o $project'.zip'
7z x -aoa -spe $project'.zip'
Remove-Item $project'.zip'
Get-ChildItem -Path ".\*" -Recurse | Copy-Item -Destination ..\ -Force -Confirm:$False
Get-ChildItem -Path ".\*" -Recurse | Remove-Item -Recurse
Set-Location \PortableApps\$project
Remove-Item .staging -Recurse
这些事情都很简单。创建一个暂存文件夹,通过 cURL 下载存档,提取存档,然后将提取的内容放入应用程序的实际文件夹中。但对于 VSCode,这在某些地方失败了。虽然某些文件已更新,例如具有新版本号的 Code.exe,但 VSCode 仍显示旧版本号并要求我更新。对于 VSCode 版本,只有前两行不同:
$project = "VSCode"
$url = "https://go.microsoft.com/fwlink/?Linkid=850641"
使用 7z GUI 提取和覆盖工作正常。但我不知道我在 Powershell 中做错了什么。
顺便说一句,您可以随意使用该脚本。
答案1
好吧,好吧。不知何故,我总是在发布到网上后立即找到答案。显然,我执行的复制操作使目录结构扁平化,破坏了一些应用程序,但没有破坏其他应用程序。以下是完整的修复脚本:
$project = "VSCode"
$url = "https://go.microsoft.com/fwlink/?Linkid=850641"
Set-Location \PortableApps\$project
Write-Output `n`n"Trying to get file from:" $url
try {mkdir .staging -erroraction 'silentlycontinue'} catch{}
Set-Location .staging
curl.exe $url -L -o $project'.zip'
7z x -aoa -spe $project'.zip'
Remove-Item $project'.zip'
# The part below is new and fixed:
Copy-Item .\* -Destination ..\ -Recurse -Force -Confirm:$False
Remove-Item .\* -Recurse -Force
Set-Location \PortableApps\$project
Remove-Item .staging -Recurse -Force