Files
App-Installer-For-Windows-8…/ArmBuild.ps1
2026-04-12 23:00:10 +08:00

98 lines
3.2 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ArmBuild.ps1
$ErrorActionPreference = "Stop"
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
$staging = Join-Path $root "_staging"
$outZip = Join-Path $root "ArmPackage.zip"
$packageFolderName = "Desktop App Installer"
$destRoot = Join-Path $staging $packageFolderName
function Copy-Binaries-ToDest($src, $dest)
{
if (!(Test-Path $src)) { return }
Get-ChildItem $src -File | Where-Object {
$_.Extension -in ".exe", ".dll"
} | ForEach-Object {
Copy-Item -Path $_.FullName -Destination $dest -Force
}
}
function Sign-Files($directory)
{
$signtool = "C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe"
$pfx = Join-Path $root "Arm_PIE.pfx"
$pfxPassword = "" # 如果有密码请填写,例如 "123456"
$timestampUrl = "http://timestamp.digicert.com"
if (-not (Test-Path $signtool)) {
Write-Warning "signtool not found at $signtool, skipping signing"
return
}
if (-not (Test-Path $pfx)) {
Write-Warning "PFX file not found at $pfx, skipping signing"
return
}
$files = Get-ChildItem -Path $directory -Recurse -Include *.exe, *.dll
foreach ($file in $files) {
Write-Host "Signing $($file.FullName)..."
$filePath = $file.FullName
if ($pfxPassword) {
& $signtool sign /f $pfx /p $pfxPassword /fd SHA256 /tr $timestampUrl /td SHA256 /a "`"$filePath`""
} else {
& $signtool sign /f $pfx /fd SHA256 /tr $timestampUrl /td SHA256 /a "`"$filePath`""
}
if ($LASTEXITCODE -ne 0) {
Write-Error "Failed to sign $filePath (exit code: $LASTEXITCODE)"
# 如需停止脚本,取消下面一行的注释
# throw "Signing failed"
}
}
}
Write-Host "Preparing staging..."
# 清理旧的 staging
if (Test-Path $staging) { Remove-Item $staging -Recurse -Force }
New-Item $destRoot -ItemType Directory | Out-Null
# ① 先放 Release
Copy-Binaries-ToDest (Join-Path $root "Release") $destRoot
# ② 再放 ARM\Release覆盖同名
Copy-Binaries-ToDest (Join-Path $root "ARM\Release") $destRoot
# ③ shared 全部铺到 Desktop App Installer 里
$shared = Join-Path $root "shared"
if (Test-Path $shared) {
Get-ChildItem $shared -Recurse | ForEach-Object {
$relativePath = $_.FullName.Substring($shared.Length).TrimStart('\')
$destinationPath = Join-Path $destRoot $relativePath
if ($_.PSIsContainer) {
if (!(Test-Path $destinationPath)) {
New-Item -Path $destinationPath -ItemType Directory | Out-Null
}
} else {
$parentDir = Split-Path $destinationPath -Parent
if (!(Test-Path $parentDir)) {
New-Item -Path $parentDir -ItemType Directory | Out-Null
}
Copy-Item -Path $_.FullName -Destination $destinationPath -Force
}
}
}
# 对最终目录中的所有 .exe 和 .dll 文件进行签名
Sign-Files $destRoot
Write-Host "Creating ZIP..."
if (Test-Path $outZip) { Remove-Item $outZip -Force }
# 压缩 _staging 下的 Desktop App Installer 文件夹
Compress-Archive -Path $destRoot -DestinationPath $outZip -CompressionLevel Optimal
# 清理 staging
Remove-Item $staging -Recurse -Force
Write-Host "Done: $outZip"